gpt4 book ai didi

c++ - 从命令行输入十六进制参数

转载 作者:行者123 更新时间:2023-11-28 03:07:48 27 4
gpt4 key购买 nike

我想将用户从命令行插入的内容打印为十六进制当我将变量声明为:unsigned char myargv[] = {0x00,0xFF};它工作正常,我得到:11111111但是当我从命令行传递我的参数时,我得到了不同的值示例:myApp.exe FF我得到:01100010

#include <iostream>
#include <string>
using namespace std;

void writeToScreen(unsigned char *data);

int main(int argc,unsigned char *argv[]){

if(argc != 2){
unsigned char myargv[] = {0x00,0xFF};
writeToScreen(&myargv[1]);
}else{
writeToScreen(argv[1]);
}
system("pause");
return 0;
}

void writeToScreen(unsigned char *data){
unsigned char dat;
dat =*(data);
for (unsigned int i=0;i<8;i++)
{
if (dat & 1)
cout<<"1";
else
cout<<"0";
dat>>=1;
}
cout<<endl;
}

最佳答案

你的参数是FF'F' 在 ASCII 中是 70,70 是 0x46 (0100 0110)。你有“0110 0010”,这是 0x46 的反写。

所以首先,您需要将参数 (FF) 转换为数字。因为目前,它只是一个字符串。例如,您可以使用 strtolstd::stringstream(使用 std::hex)。

使用 strtol:

#include <iostream>
#include <string>
#include <stdlib.h>

using namespace std;

void writeToScreen(char *data);

int main(int argc, char *argv[]){
writeToScreen(argv[1]);
return 0;
}

void writeToScreen(char *data){
unsigned char dat = strtol(data, NULL, 16);
for (unsigned int i=0;i<8;i++)
{
if (dat & 1)
cout<<"1";
else
cout<<"0";
dat>>=1;
}
cout<<endl;
}

注意字节仍然从 LSB 打印到 MSB。

关于c++ - 从命令行输入十六进制参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19271449/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com