输入参数的字节转换

时间:2015-12-29 11:50:59

标签: c byte

我尝试编写C应用程序,并使用跟随代码,读取16个字符的输入参数

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

    if (argc != 2) {
        fprintf(stderr,
            "Usage: %s <input> \n",argv[0]);
        return EXIT_FAILURE;
    }

    strncpy((char *)input, argv[1], 16);

    return 0;
 }

输入参数字符如:&#34; 5f52433120d32104&#34; (./myApplication 5f52433120d32104)

我想将输入字符作为字节并将其放入数组(5f,52,43等...),例如:

unsigned char* myByteArray;

由于

1 个答案:

答案 0 :(得分:0)

您可以使用sscanf在循环中扫描命令行参数。给定名为inputstr的变量的示例包含您的字符串参数:

char* inputstr = argv[1];
unsigned char myByteArray[ELEMENT_NO]; /*ELEMENT_NO is the number of elements to scan*/
for(int i = 0; i < ELEMENT_NO; ++i)
{
    unsigned int value; /*The value to store the read value in*/
    sscanf(inputstr, "%2x", &value); /*Read 2 hexadecimal digits into value*/
    myByteArray[i] = value; /*Store the new value*/
    inpustr += 2; /*Increase 2 characters*/
}

这种方式myByteArray将包含以十六进制格式读入unsigned char数组的输入字符串。

如果您使用的是兼容C99的编译器,则可以使用"%2hhx"格式说明符直接将您的输入读入unsigned char,而不是使用中间unsigned int