help:从用户获取十六进制输入数据到数组c代码

时间:2009-08-11 10:10:20

标签: c

我有一个数组(char数据[16]),我想以十六进制数字从用户获取数据,所以数组看起来像:

 data[0]=0x887f76b1
 data[1]=0x8226baac
 ...

当用户输入为:887f76b18226baac ...

时 非常感谢你。

2 个答案:

答案 0 :(得分:2)

基本上,您需要读取字符串的前8个字符并将其转换为十进制格式。有可用于实现此目的的实用程序。例如:

const char * data = "887f76b18226baac";
char buff[9] = {0};
unsigned long x = 0, y = 0;

sscanf(data, "%8s", buff);
x = strtoul(buff, NULL, 16);

sscanf(data + 8, "%8s", buff);
y = strtoul(buff, NULL, 16);

意识到我在那里省略了所有的错误检查。 sscanf和strtoul都返回错误值(或提供检查错误的机制)。如果要转换值,最好检查这些错误情况。

编辑:如评论中所述,您将无法将这些值存储在char数组中。您将需要一个正确数据类型的数组(对于我的示例,您将使用无符号长数组[16])

答案 1 :(得分:0)

我认为你想要的东西如下:

#include <stdio.h>
#include <string.h>

#define MAX_BUFFER 1024

int main(int argc, char **argv)
{
    char *input = "887f76b18226baac";
    unsigned char data[MAX_BUFFER];
    char tmp[3]; /* sue me for using magic numbers :) */
    int  i = 0, offset = 0;

    memset(data, 0, sizeof(data));

    while(sscanf(input + offset, "%2s", tmp) != EOF && i < MAX_BUFFER) {
        data[i++] = strtoul(tmp, NULL, 16);
        offset += 2;
    }
    return(0);
}

我假设您绝对需要将输入存储在字符数组中。如果您希望将0x887f76b1放入一个数组元素中,则需要使用 unsigned long ,如 ezpz 所示。