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

C语言如何将uint8_t十六进制数组转换为保留前导零的8位字符串

修正后可运行代码

#include <stdio.h>
#include <stdint.h>

int main(){
    // 4个uint8_t每个转2位十六进制共8位,+1位存字符串结束符'\0',总长度至少9
    char dene[9];
    uint8_t hex_in[4]={0x10,0x01,0x00,0x11};
    // %02x:0表示不足位补前导零,2表示固定输出2位
    sprintf(dene, "%02x%02x%02x%02x", hex_in[0], hex_in[1], hex_in[2], hex_in[3]);
    printf("dene %s\n",dene);
    return 0;
}

运行后输出结果为dene 10010011,符合需求。

核心修改点说明

  • 输出格式符调整为%02x:%x是十六进制输出的基础格式,前缀02表示强制输出2位,位数不足时用前导零补齐,即可解决前导零被省略的问题。如果需要输出大写的十六进制字符,将x替换为X即可。
  • 调整存储结果的字符数组长度:原有代码中dene仅分配了2字节的空间,完全无法容纳8位十六进制字符+1位字符串结束符,会触发缓冲区越界的未定义行为,必须将长度调整为至少9字节。
  • 若要提升代码安全性,可将sprintf替换为snprintf,写法如下:
    snprintf(dene, sizeof(dene), "%02x%02x%02x%02x", hex_in[0], hex_in[1], hex_in[2], hex_in[3]);
    
    可以避免因为数组长度计算错误导致的缓冲区溢出问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 06:36:11