将char数组中的char转换为ANSI C中自己的char数组

时间:2012-05-09 22:50:29

标签: c arrays character

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

char *hex = ""402499999999999A"

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

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

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

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

2 个答案:

答案 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]”是否包含有效/合理的字符)。