2014-10-19 125 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