[英]Input parametrs as HEX from command line
当我将变量声明为: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)转换为数字。 因为当前,它只是一个字符串。 例如,您可以使用strtol
或std::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。
将十六进制参数作为命令行参数输入到程序中的另一种方法是借助Perl,如下所示:
./main $(perl -e 'print "\xc8\xce"')
这实际上将向主程序中发送2个字节(0xC8和0xCE)的数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.