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

如何在C语言中将无符号短整型十六进制值转为字符数组?

unsigned short 十六进制转字符数组的实现方法

当然可行,unsigned short 是16位无符号整数,对应的十六进制字符串最多4位(范围从0x0000到0xFFFF),只要分配足够的字符数组空间就能完成转换。下面是几种常用的实现方式:

方法1:使用sprintf快速格式化

这是最简洁的方式,利用标准库的格式化输出函数直接生成字符串:

#include <stdio.h>

int main() {
    unsigned short target = 0x1234;
    char hex_buf[5]; // 4位十六进制字符 + 1位字符串终止符'\0'
    
    // %04X 表示输出4位大写十六进制,不足补0;小写用%04x
    sprintf(hex_buf, "%04X", target);
    
    printf("转换结果:%s\n", hex_buf); // 输出 "1234"
    return 0;
}

方法2:用snprintf提升安全性

如果担心缓冲区溢出(比如数组大小设置错误),可以用snprintf指定最大输出长度,更稳妥:

#include <stdio.h>

int main() {
    unsigned short target = 0x1234;
    char hex_buf[5];
    
    // 第二个参数指定缓冲区大小,防止溢出
    snprintf(hex_buf, sizeof(hex_buf), "%04X", target);
    
    printf("转换结果:%s\n", hex_buf);
    return 0;
}

方法3:手动实现(不依赖标准库)

如果想自己处理位运算逻辑,也可以手动提取每4位的数值,映射到十六进制字符:

#include <stdio.h>

void ushort_to_hex_str(unsigned short val, char *dest) {
    const char hex_chars[] = "0123456789ABCDEF";
    // 从高位到低位依次提取4位,对应十六进制的每一位
    dest[0] = hex_chars[(val >> 12) & 0xF]; // 最高4位
    dest[1] = hex_chars[(val >> 8) & 0xF];
    dest[2] = hex_chars[(val >> 4) & 0xF];
    dest[3] = hex_chars[val & 0xF]; // 最低4位
    dest[4] = '\0'; // 必须添加字符串终止符
}

int main() {
    unsigned short target = 0x1234;
    char hex_buf[5];
    
    ushort_to_hex_str(target, hex_buf);
    printf("转换结果:%s\n", hex_buf);
    return 0;
}

注意事项

  • 字符数组的最小长度必须是5,因为4位十六进制字符加上强制要求的'\0'终止符,否则会出现字符串截断或内存越界问题。
  • 如果不需要固定4位长度(比如0x12希望输出"12"而非"0012"),可以把格式化字符串改成"%X"(大写)或"%x"(小写),但数组大小仍建议保留5位以确保安全。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 00:05:22