c - 将带十六进制的无符号整数转换为字符串
问题描述
我有一个 _u8 数组,其中包含十六进制,例如:A81B6A9D4D2E。我想将其转换为以下形式的字符串:A8-1B-6A-9D-4D-2E 并将其作为字符串发送。
#define SL_MAC_ADDR_LEN UINT8_C(6)
_u8 wlanMacAddressVal[SL_MAC_ADDR_LEN];
我可以用循环打印它,如下所示:
for(int i = 0; i < SL_MAC_ADDR_LEN; i++){
printf(%X, wlanMacAddressVal[i]);
printf("-");
}
但是当我尝试创建一个字符串/字符数组并使用 strcat 函数时,我的结果总是很奇怪的符号。
我试过在循环中使用 sprintf() ,但它总是覆盖最后的十六进制
sprintf(wlanMacString,"%X",(_u8 *)wlanMacAddressVal[i]);
解决方案
sprintf
与02x
格式说明符一起使用。
char buf[SL_MAC_ADDR_LEN*3]; //2*number of hex bytes + number of `-` symbols + \0.
char *p = buf;
for (int i=0;i<SL_MAC_ADDR_LEN;i++)
p += sprintf(p, i ? "-%02hhx":"%02hhx", _u8Array[i]);
请注意,您需要提前p
跳过缓冲区中打印的字节数。
推荐阅读
- python - 如何从终端运行 google Colab Notebook?
- python - 更改图像名称 - PermissionError: [WinError 32] 该进程无法访问该文件,因为它正被另一个进程使用:
- python - 我的情节是空白的,我没有得到任何错误?
- python - 此错误的问题: (-215:Assertion failed) !ssize.empty() in function 'cv::resize' OpenCV
- mongodb - 更改子文档猫鼬的多个对象中的特定字段
- java - gRPC 客户端在连接到 C# 服务器时出错
- javascript - 需要 Firefox 和 IE 的“localStorage”替代品
- pgadmin - 数据不会导入 PG Admin
- python - 从(解析)Sympy结果中提取值的可靠方法
- java - 生成 Zip 文件 - 从 Url 下载 PDF 并生成 Zip 以在浏览器中下载 - 损坏的 PDF