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

C语言中如何将4字节十六进制整数转换为字符数组?

十六进制整数转单字符char数组的解决方案

针对int x = 0x12BFDA09的转换需求,下面提供两种可行的实现方式:

方法一:手动逐位提取转换

通过位运算逐个提取整数的每4位(对应一个十六进制数字),再映射为对应的字符,适合需要精细控制转换过程的场景。

#include <stdio.h>

int main() {
    int x = 0x12BFDA09;
    char hex_chars[8];
    // 预定义十六进制字符映射表(大写)
    const char hex_map[] = "0123456789ABCDEF";
    
    // 循环提取8个十六进制数字
    for (int i = 0; i < 8; i++) {
        // 右移操作将目标4位移到最低位,再用&0xF提取该4位的值
        int nibble = (x >> (28 - 4 * i)) & 0xF;
        hex_chars[i] = hex_map[nibble];
    }
    
    // 输出验证格式
    printf("{'%c', '%c', '%c', '%c', '%c', '%c', '%c', '%c'}\n", 
           hex_chars[0], hex_chars[1], hex_chars[2], hex_chars[3],
           hex_chars[4], hex_chars[5], hex_chars[6], hex_chars[7]);
    return 0;
}

方法二:利用标准库函数简化实现

借助sprintf将整数直接格式化为十六进制字符串,再提取字符到目标数组,代码更简洁。

#include <stdio.h>
#include <string.h>

int main() {
    int x = 0x12BFDA09;
    char hex_str[9]; // 存储8个十六进制字符+字符串结束符
    char hex_chars[8];
    
    // 用%X格式化生成大写十六进制字符串
    sprintf(hex_str, "%X", x);
    // 复制字符串前8个字符到char数组
    memcpy(hex_chars, hex_str, 8);
    
    // 输出验证格式
    printf("{'%c', '%c', '%c', '%c', '%c', '%c', '%c', '%c'}\n", 
           hex_chars[0], hex_chars[1], hex_chars[2], hex_chars[3],
           hex_chars[4], hex_chars[5], hex_chars[6], hex_chars[7]);
    return 0;
}

注意事项

  • 如果处理的是负数(最高位为1的有符号int),手动转换时需要将整数转为无符号类型后再右移,避免符号扩展干扰结果(例如(unsigned int)x >> ...)。
  • 两种方法最终都能生成符合要求的{'1', '2', 'B', 'F', 'D', 'A', '0', '9'}格式的char数组。

内容的提问来源于stack exchange,提问作者Daniel Zamloot

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:55:16