从命令行输入HEX参数

时间:2013-10-09 12:00:53

标签: c++

我想打印用户从命令行插入的内容为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;
}

2 个答案:

答案 0 :(得分:2)

你的论点是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。

答案 1 :(得分:0)

将十六进制参数作为命令行参数输入程序的另一种方法是在Perl的帮助下,如下所示,

./main $(perl -e 'print "\xc8\xce"')

这在净效应中,将2个字节(0xC8和0xCE)的数据发送到主程序。