我想打印用户从命令行插入的内容为HEX 当我将我的变量声明为: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;
}
答案 0 :(得分:2)
你的论点是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。
答案 1 :(得分:0)
将十六进制参数作为命令行参数输入程序的另一种方法是在Perl的帮助下,如下所示,
./main $(perl -e 'print "\xc8\xce"')
这在净效应中,将2个字节(0xC8和0xCE)的数据发送到主程序。