C:将 uint8 数组转换为包含其字节的十六进制表示形式的字符串

标签 c arrays string

我有一个uint8数组:

int i = 0;
uint8_t x[32];

for (i = 0; i < 32; i++) {
    x[i] = i*i;
    printf("x[%d]: %02X\n", i, x[i]);
}

以下是数组的内容:

x[0]: 0 00
x[1]: 1 01
x[2]: 4 04
...
x[14]: 196 C4
x[15]: 225 E1
...etc

我想将 x 数组转换为 char 数组,该数组相当于存储在 x 中的字节数组的完整字符串表示形式,即:

00010409101924314051647990A9C4E10021446990B9E4114071A4D9104984C1

基本上,我想做的程序相当于

char hex[64] = "00010409101924314051647990A9C4E10021446990B9E4114071A4D9104984C1"

如何使用 C 编程语言来完成此操作?

最佳答案

您可以使用sprintf并传递&hex[2*i]作为打印位置:

char hex[65];
for (int i = 0 ; i != 32 ; i++) {
    sprintf(&hex[2*i], "%02X", x[i]);
}
hex[64] = '\0';

由于您知道每个 sprintf 将使用两个位置,因此您可以确定 32 个 sprintf 调用将填充 hex[64] 中的所有 64 个字符.

注意:您的示例尝试在 hex[64] 中存储 65 个字符。第 65 个来自字符串文字的空终止符。

关于C:将 uint8 数组转换为包含其字节的十六进制表示形式的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42939218/

相关文章:

c - 连续迭代 RGB?

php - 如何通过查询从 mysql 数据库表创建的数组并在另一个 php 文件中使用该数组?

java - 用户在 java 中从一系列行输入的二维数组,以行输入 "end"结尾

Python 字节字符串在字典中打印不正确

iphone - 如何在iPhone SDK的UITextField文本中删除开头的0

c++ - float 到字符串而不四舍五入

c - Visual Studio 动态分配多维数组

C 动态链接到共享库抑制/处理 "cannot open shared object file" fatal error ,并继续链接

c - 在 Xamarin 项目中绑定(bind) native C 库

arrays - swift 中的二维数组查找 - 类似于 excel 中的 vlookup