将字符串转换为十六进

时间:2012-03-11 11:28:19

标签: c hex scanf

我的字符串有0111111100000000000000000000101

我想将其转换为十六进制,所以我使用了下面的代码

    int assembledHex;
    sscanf(buffer, "%x", &assembledHex);
    printf("this is the assembled hex %x\n",assembledHex);

但是当我打印它时,它给了我101.我认为sscanf可以从字符串转换为十六进制,我做错了什么以及如何解决它。我想要的结果是0x3F800005

2 个答案:

答案 0 :(得分:0)

这不是检查或任何事情,也很慢,但它是一个快速的开始:

unsigned int bin_to_int(const char *s) {
    int i;
    unsigned int result;

    result = 0;

    if (s[0] == '1') result++;

    for (i = 1; i < strlen(s); i++) {
        result <<= 1;

        if (s[i] == '1') {
            result++;
        }
    }

    return result;
}

答案 1 :(得分:0)

您的sscanf正在读取字符串为HEX,但字符串是以二进制形式写的。你得到“101”,因为int只能存储前8位 - 每位数是4位,所以两位数= 8位= 1位,8位是4位,大小为{{1 }}。所以你实际存储“00000101”,买int不打印前导零,所以你得到“101”。