我有一个char数组,表示十六进制形式的双精度浮点数。
char *hex = ""402499999999999A"
我想将hex
中的每个char作为自己的char数组提取出来并将其读入unsigned int num
。例如,我试过
sscanf((char *)&hex[3], "%X", &num);
但这并没有给我第四个字符作为单个字符数组,它给我从第四个位置开始的子字符数组,我想这是因为数组是由它们的第一个元素的指针给出的。
有更好的方法吗?我看了strcpy
,似乎我只能复制前n个字符,所以这不好。
答案 0 :(得分:1)
你可以通过多种方式做到这一点。一种方法如下(这是你如何做的正确方法):
char only_1_char[2] = {'\0', '\0'};
only_1_char[0] = hex[3];
sscanf(only_1_char, "%X", &num);
和更有效的解决方案:
if (hex[3] <= '9')
num = hex[3] - '0';
else
num = hex[3] - 'A' + 10;
这只是一个例子。事实上,如果可能的话,你需要处理无效输入和小写情况。
答案 1 :(得分:0)
尝试这样的事情:
for(i = 0; src[i] != 0; i++) {
if(src[i]) <= '9') {
dest[i] = src[i] - '0';
} else {
dest[i] = toupper(src[i]) - 'A' + 10;
}
}
可以通过错误处理来改进(例如,检测“src [i]”是否包含有效/合理的字符)。