You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 23:15:02