有人能建议一下如何在C语言中将字节数组转换为ASCII码吗?或者将字节数组转换为十六进制,然后再转换为ASCII码?
[04/02][编辑]: 重新表述一下,我希望将字节转换为十六进制并将转换后的十六进制值存储在数据结构中。应该怎么做呢?
祝好, darkie
如果在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
bytes
,从中复制,将其附加到其他字符串,遍历它,打印它等等。int
的模256,这不太可能是程序员的期望。 - Eli Bendersky'a'
可能是 97,也可能不是。在今天的大多数计算机上,它是 97,但 C 标准并不保证这一点。为了实现可移植性,必须制作一个查找表。当然,在今天的大多数系统上,'a' == 97
是正确的。 - Alok Singhal首先,你应该更加注意你的问题陈述。很难说出你真正想听到什么。我想你有一些二进制数据块,并希望将其转换为人类可读的形式,例如在屏幕上进行调试转储(我知道我可能在这里误解了你)。
你可以使用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++;
}
}
在C语言中,字符和整数都是以二进制形式存储的。当在ASCII范围内工作时,它们通常可以互换使用。
int i = 0x61;
char x = i;
fprintf( stdout, "%c", x );
这应该会在屏幕上打印出 'a'。
< 0
和> 127
的值。它可以只是一个字节数组,就像有整数数组等一样。这是对Andy评论的补充。字节数组不是字符串,但可以被解释为字符串,这是一个区别。 - Felix Kling