2014-10-19 114 views
0

我想每个字节读取一个数组,但是该数组可以是任何大于一个字节的类型。每个字节读取阵列字节

采取例如以下代码:

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型的,因而每个元素是2个字节长。要读取内存中的连续数据,我尝试使用一位长的unsigned char。打印5个第一个字节,我希望输出“01020”,但我得到“10203”。第一个字节丢失,但我不知道为什么。在我的IDE中,我检查了地址为numberspoint的地址,并且它们在循环之前都指向相同的内存地址。

+4

因为你的机器是[little endian](https://en.wikipedia.org/wiki/Endianness#Atomic_element_size_8-bit_2)... – 2014-10-19 10:15:57

回答

1

这是因为你的机器是小端。

要正确地理解它,让我们检查这个

for (int i = 0; i < 5; i++) 
    { 
    printf("%d",(int) *point); 
    point ++; 
    printf("%d",(int) *point); 
    point ++; 
    } 

这将打印输出如下:1020304050

而且因为你只是通过增加单字节指针point。因此,您将获得第一个5字节作为输出,即10203