如何在C中将字节数组转换为十六进制字符串?
|
我有:
uint8 buf[] = {0, 1, 10, 11};
我想将字节数组转换为字符串,以便可以使用printf打印该字符串:
printf(\"%s\\n\", str);
并获取(不需要冒号):
\"00:01:0A:0B\"
任何帮助将不胜感激。
没有找到相关结果
已邀请:
18 个回复
辟官陡板休
以更通用的方式:
要连接到字符串,有几种方法可以执行此操作...我可能会保留一个指向字符串末尾的指针并使用sprintf。您还应该跟踪数组的大小,以确保其大小不会超过分配的空间:
期差骇蓟
这是另一个稍短的版本。它仅避免中间索引变量i和重复的laste case代码(但是终止字符被写入两次)。
下面是回答评论的另一个版本,该评论说我使用“技巧”来知道输入缓冲区的大小。实际上,这不是技巧,而是必要的输入知识(您需要知道要转换的数据的大小)。通过将转换代码提取到一个单独的函数中,我使这一点变得更加清晰。我还为目标缓冲区添加了边界检查代码,如果我们知道自己在做什么,则实际上并没有必要。
疾桓
课刊灭似
这很棘手,不容易理解,我在下面的评论中添加了解释:
呢率篓舍烫
还具有格式说明符,用于通过单数格式说明符“直接”输出数组/内存内容: https://www.kernel.org/doc/Documentation/printk-formats.txt
...但是,对于标准用户空间
,似乎不存在这些格式说明符。
漂截嘘
将任意数据
转换为十六进制数字
的无终止字符串
:
例
结果:
。 直播:Tio.run。
队辅坟阮阶
脾萌
雄鞋谋塘
例: 码
输出值
埃输林桨铃
的语义(但不是语法!)的动态字符串库完成的,这似乎是更通用的解决方案,但仅在单个情况下可能并不值得额外的复杂性。
厘恼轨
字符串中,则可以使用
。您需要为所有打印的字符分配空间,包括前导零和冒号。 扩展Mark的答案:
因此,
将包含十六进制字符串。
屉杆绊
校勒魏寡
它将打印长度为
的
到
的十六进制转储(您可以将其默认设置为
)。每行将包含39个字节,每个字节均使用大写两位数十六进制表示。字节之间将有一个空格。在行尾或缓冲区末尾,它将打印换行符。如果
设置为0,则不会打印new_line。自己尝试。
邵酮
用法:
公藕
的两倍,并且其分配由呼叫者管理。
捻盒愧杯
现在,我可以这样使用我的函数:
对象是Arduino库的一部分,
是我的类的成员,带有以下声明
。
街茬
出: bbccdd0fef0f0e0d0c
誓猎贰