有人可以建议在C中将字节数组转换为ASCII吗?或者将字节数组转换为十六进制,然后转换为ASCII?
[04/02] [已编辑]:为了对其进行改写,我希望将字节转换为十六进制并将转换后的十六进制值存储在数据结构中。应该怎么做呢?
此致 darkie
答案 0 :(得分:3)
好吧,如果你在C中将一个整数解释为char
,你就会得到那个ASCII字符,只要它在范围内。
int i = 97;
char c = i;
printf("The character of %d is %c\n", i, c);
打印:
The character of 97 is a
请注意,没有进行错误检查 - 我假设0 <= i < 128
(ASCII范围)。
否则,字节值数组可以直接解释为ASCII字符串:
char bytes[] = {97, 98, 99, 100, 101, 0};
printf("The string: %s\n", bytes);
打印:
The string: abcde
注意最后一个字节:0,需要正确终止字符串。您可以将bytes
用作任何其他C字符串,从中复制,将其附加到其他字符串,遍历它,打印它等等。
答案 1 :(得分:1)
首先,您应该更加谨慎地制定问题。很难说你真正想听到什么。我认为你有一些二进制blob,并希望它以人类可读的形式,例如将其转储到屏幕上进行调试。 (我知道我可能在这里误解了你。)
例如,您可以使用snprintf(buf, sizeof(buf), "%.2x", byte_array[i])
将单个字节转换为十六进制ASCII表示形式。这是一个在屏幕上转储整个内存区域的函数:
void
hexdump(const void *data, int size)
{
const unsigned char *byte = data;
while (size > 0)
{
size--;
printf("%.2x ", *byte);
byte++;
}
}
答案 2 :(得分:0)
Char.s和Int.s以C语言存储在二进制文件中。在ASCII范围内工作时,通常可以代替彼此使用。
int i = 0x61;
char x = i;
fprintf( stdout, "%c", x );
应该在屏幕上打印'a'。