如何在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
相关产品推荐
相关产品推荐

