首页 > 解决方案 > 在一行中打印十六进制数组的所有元素

问题描述

我在 C 中有一个数组char arr[100],其中的每个元素都可能包含一个任意的十六进制值(甚至是 0)。我希望能够以某种方式将这个数组打印在一行中,例如:

arr[0] = 0x11
arr[1] = 0x00
...
arr[99] = 0x22

输出应该是:

0x11 0x00 ..... 0x22

如果我使用printf()with %s,它将停在 0 处。我不想使用for循环来逐个打印每个字符%x。由于我正在使用的系统,我对可以使用的 API 有限制。它不允许printf()。它有一个功能print(),可以在每次打印后添加一个新行,但接受格式字符串,如%x, %s, %d.like 等printf()

怎样才能达到要求?

标签: carrayshex

解决方案


您可以使用sprintf复制到缓冲区,然后打印缓冲区

#include <stdio.h>

int main(void)
{
    char arr[] = { 0x11, 0x00, 0x22, 0xFF };

    int count = sizeof(arr);

    //each element needs 5 bytes
    char *buf = malloc(5 * count + 1);

    for(int i = 0; i < count; i++)
        sprintf(buf + i * 5, "0x%02X ", arr[i] & 0xFF);

    //optional: remove the last blank space
    buf[5 * count - 1] = 0;

    printf("[%s]\n", buf);//or whichever print function available

    return 0;
}

推荐阅读