2014-10-19 3 views
0

바이트 당 배열을 읽고 싶지만 배열은 1 바이트보다 큰 모든 유형 일 수 있습니다. 예바이트 당 배열 바이트 읽기

취하는 다음 코드

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이며, 따라서 각각의 요소들은 두 바이트 길이이다. 메모리의 연속 데이터를 읽으려면 길이가 1 비트 인 unsigned char을 사용하려고합니다. 첫 번째 5 바이트를 인쇄하면 출력이 "01020"이 될 것으로 예상되지만 "10203"이됩니다. 첫 번째 바이트가 누락되었지만 그 이유는 모르겠습니다. IDE에서 numberspoint의 주소를 확인했으며 둘 다 루프 전에 동일한 메모리 주소를 가리 킵니다.

+4

컴퓨터가 [리틀 엔디안] (https://en.wikipedia.org/wiki/Endianness#Atomic_element_size_8-bit_2)이기 때문에 ... –

답변

1

이것은 컴퓨터가 리틀 엔디안이기 때문입니다. 그냥 단일 바이트로 포인터 point를 증가하기 때문에 1020304050

을 그리고 :

는 이제이

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

이 다음과 같은 출력을 인쇄합니다 확인하자, 그것을 제대로 이해하기. 따라서 10203 인 출력으로 첫 번째 5 바이트가 나타납니다.