我的字符串有0111111100000000000000000000101
我想将其转换为十六进制,所以我使用了下面的代码
int assembledHex;
sscanf(buffer, "%x", &assembledHex);
printf("this is the assembled hex %x\n",assembledHex);
但是当我打印它时,它给了我101.我认为sscanf可以从字符串转换为十六进制,我做错了什么以及如何解决它。我想要的结果是0x3F800005
答案 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”。