我有一个数组(char数据[16]),我想以十六进制数字从用户获取数据,所以数组看起来像:
data[0]=0x887f76b1
data[1]=0x8226baac
...
当用户输入为:887f76b18226baac ...
答案 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 所示。