【发布时间】:2010-04-12 07:31:53
【问题描述】:
我希望这两个打印函数做同样的事情:
unsigned int Arraye[] = {0xffff,0xefef,65,66,67,68,69,0};
char Arrage[] = {0xffff,0xefef,65,66,67,68,69,0};
printf("%s", (char*)(2+ Arraye));
printf("%s", (char*)(2+ Arrage));
其中 Array 是一个无符号整数。通常,我会更改类型,但问题是大多数数组是数字,尽管特定部分应打印为 ASCII。目前,无符号数组打印为“A”,字符数组打印为所需的“ABCDE”。
【问题讨论】:
-
为什么你的“字节”包含 16 位?
-
我希望 0xffff
-
(unsigned int) 0xffff 在内存中是 0x0000ffff。 C 字符串以 null 结尾,它不会提供您所期望的。
-
@Kenny,一个字节不是 8位,它在标准中定义为字符类型的大小。对于@J16,您假设无符号整数是 32 位的,而不是可移植的假设。
-
@Michael,不在 ISO C 标准中。一个字节就是存储字符所需的位数。标准倾向于使用术语八位组来表示 8 位值。
标签: c casting character-encoding printf