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

十六进制字符串转uint8_t数组正确性验证及打印异常问题咨询

问题根因

  • 格式符使用错误:%" PRIu8是用于打印单个uint8_t类型数值的格式宏,你直接传入数组名作为参数时,数组名会自动退化为指向数组首地址的指针,printf会将该内存地址强制按uint8_t规则截断输出,你看到的奇怪值就是数组首地址截断后的结果。
  • 直接打印数组的逻辑错误:uint8_t数组存储的是纯字节序列,其中可能包含值为\0的字节,即便误用%s打印也会因为遇到\0就终止输出,无法得到完整内容。

修复方案

遍历uint8_t数组的每个元素逐个打印即可,示例代码如下:

printf("[SKT]\tByte Array: ");
for (int i = 0; i < uint_size; i++) {
    // 按十六进制打印每个字节,每个字节占2位,不足补前导0
    printf("%02" PRIx8 " ", uint8_payload[i]);
}
printf("\n");

额外注意点

你调用convert_hex时传入的count参数为socket接收的字符串长度n,但十六进制字符串每2个字符对应1个字节,实际转换后的字节数应为n/2,建议传入sizeof(uint8_payload)和n/2的最小值作为count参数更安全,避免数组越界。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:45:03