在C中从字节转换为ASCII

任何人都可以建议在C中将字节数组转换为ASCII的方法吗? 或者将字节数组转换为hex,然后转换为ASCII?

[04/02] [已编辑]:要重新编写它,我希望将字节转换为hex并将转换后的hex值存储在数据结构中。 应该怎么做呢?

问候,黑暗

首先,你应该更加谨慎地制定你的问题。 很难说你真正想听到什么。 我认为你有一些二进制blob,并希望它以人类可读的forms,例如将其转储到屏幕上进行调试。 (我知道我可能在这里误解了你)。

例如,您可以使用snprintf(buf, sizeof(buf), "%.2x", byte_array[i])将单个字节转换为hexASCII表示forms。 这是一个在屏幕上转储整个内存区域的函数:

 void hexdump(const void *data, int size) { const unsigned char *byte = data; while (size > 0) { size--; printf("%.2x ", *byte); byte++; } } 

好吧,如果你将一个整数解释为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字符串,从中复制,将其附加到其他字符串,遍历它,打印它等。

Char.s和Int.s以二进制forms存储在C中。在ASCII范围内工作时,通常可以代替彼此使用。

 int i = 0x61; char x = i; fprintf( stdout, "%c", x ); 

应该在屏幕上打印’a’。