如何使用和不使用sprintf将Hex转换为Ascii?

pat*_*ick 3 c

我曾经strtol将字符串转换为十六进制,现在我需要将它打印到屏幕上.我不确定我是否可以使用,sprintf因为我只有20k的内存才能在这块板上使用.备选方案欢迎.

小智 9

要手动执行此操作,最简单的方法是将表将nybbles映射到ASCII:

static const char nybble_chars[] = "0123456789ABCDEF";
Run Code Online (Sandbox Code Playgroud)

然后将一个字节转换为2个十六进制字符 - 假设unsigned char是一个字节的最佳表示,但不对其大小做任何假设 - 提取每个nybble并获取它的字符:

void get_byte_hex( unsigned char b, char *ch1, char *ch2 ) {
    *ch1 = nybble_chars[ ( b >> 4 ) & 0x0F ];
    *ch2 = nybble_chars[ b & 0x0F ];
}
Run Code Online (Sandbox Code Playgroud)

这直接扩展到更广泛的数据类型,并且应该在各种体系结构中生成相当简洁的代码.