我曾经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)
这直接扩展到更广泛的数据类型,并且应该在各种体系结构中生成相当简洁的代码.