C语言如何将二进制char数组转换为对应的十六进制数值
实现思路
- 首先校验输入的二进制字符串长度:建议为8的整数倍,你给出的示例为32位刚好对应4个字节,符合常规转换需求
- 逐位读取二进制字符串的
'0'/'1'字符,按位运算拼接为对应的整数数值 - 最终可直接格式化输出为
0x开头的十六进制格式,也可按字节拆分存回原数组
完整可运行代码
#include <stdio.h> #include <string.h> #include <stdint.h> // 入参为二进制字符串格式的unsigned char数组,返回转换后的32位无符号整数 uint32_t bin_str_to_hex(const unsigned char *bin_str) { uint32_t res = 0; int len = strlen((const char*)bin_str); for (int i = 0; i < len; i++) { res <<= 1; if (bin_str[i] == '1') { res |= 1; } // 若需要严格校验输入,可在此处加非0/1字符的报错逻辑 } return res; } int main() { unsigned char array[] = "11000000111111111000000010000000"; uint32_t hex_result = bin_str_to_hex(array); // 直接打印0x开头的大写十六进制结果 printf("转换结果:0x%08X\n", hex_result); // 若需要将结果存回原数组,按大端顺序(和输入二进制顺序一致)存储示例: array[0] = (hex_result >> 24) & 0xFF; array[1] = (hex_result >> 16) & 0xFF; array[2] = (hex_result >> 8) & 0xFF; array[3] = hex_result & 0xFF; // 验证存回数组的字节 printf("存回数组的字节:0x%02X 0x%02X 0x%02X 0x%02X\n", array[0], array[1], array[2], array[3]); return 0; }
运行输出
转换结果:0xC0FF8080 存回数组的字节:0xC0 0xFF 0x80 0x80
注意事项
- 若输入二进制字符串长度超过32位,可将返回值替换为
uint64_t,或调整逻辑直接按字节输出多个十六进制值 - 存回原数组时若需要小端字节序,调整字节拆分的顺序即可
- 若需要输出小写十六进制,将
printf的格式符%X改为%x即可
内容的提问来源于stack exchange,提问作者Tyler Mckean
相关产品推荐
相关产品推荐

