我想读取每个字节的数组,但是数组可以是大于一个字节的任何类型。
以下面的代码为例:
unsigned short numbers[5] = { 1, 2, 3, 4, 5 };
unsigned char* point = (unsigned char*) numbers;
for (int i = 0; i < 5; i++)
{
std::cout << (int) *point;
point ++;
}
数组的类型为unsigned short
,因此每个元素的长度为两个字节。要读取内存中的连续数据,我尝试使用一位长unsigned char
。打印5个第一个字节,我希望输出&#34; 01020&#34;,但我得到&#34; 10203&#34;。缺少第一个字节,但我不知道为什么。在我的IDE中,我检查了numbers
和point
的地址,它们都指向循环前的相同内存地址。
答案 0 :(得分:1)
这是因为你的机器是小端的。
要正确理解,请检查
for (int i = 0; i < 5; i++)
{
printf("%d",(int) *point);
point ++;
printf("%d",(int) *point);
point ++;
}
这将打印以下输出:1020304050
因为您只是将指针point
递增一个字节。因此,您将获得第一个5
字节作为输出10203
。