繁体   English   中英

从命令行输入参数作为十六进制

[英]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)转换为数字。 因为当前,它只是一个字符串。 例如,您可以使用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。

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

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

这实际上将向主程序中发送2个字节(0xC8和0xCE)的数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM