0

我有一个 char 数组,以十六进制形式表示双精度浮点数。

char *hex = ""402499999999999A"

我想将每个 char 提取hex为自己的 char 数组并将其读入 unsigned int num。例如,我试过

sscanf((char *)&hex[3], "%X", &num);

但这并没有给我第四个字符作为单独的字符数组,它给了我从第四个位置开始的子字符数组,我想这是因为数组是由它们的第一个元素的指针给出的。

有一个更好的方法吗?我看了看,strcpy似乎只能复制前n个字符,所以不好。

4

2 回答 2

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;

不过,这只是一个示例。事实上,如果可能的话,您需要处理无效输入和小写字母。

于 2012-05-09T22:55:55.203 回答
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]”是否包含有效/健全的字符)。

于 2012-05-09T22:54:02.420 回答