C/C++

Big Endian , Little Endian

알 수 없는 사용자 2008. 7. 5. 15:00
4byte 정수 처리부분만 나누어 진다.

Big Endial - Sun cpu를 사용 하는 컴퓨터

Little Endial - Intel cpu를 사용 하는 컴퓨터


0x12345678 값을 32비트로 표현을 하면 ,

Bing Endial 0x12 , 0x34 , 0x56 , 0x78  ( 상위 바이트값이 메모리상에 먼저 (번지수가 작은 위치에 ) 표시되는 방법

출력 : 12345678

Little Endial 0x78 , 0x56 , 0x34 , 0x12  ( 하위 바이트의 값이 메모리상에 먼저 ( 번지수가 작은 위치에 ) 표시되는 방법

출력 : 78654312


네트워크를 통해 데이터를 전송 할때는 통일된 방식을 이용해서 데이터를 전송하기로 약속 하였는데 , 이것이 바로 '네트워크 바이트 순서(Network Byte Order ) 이다. 네트워크 바이트 순서는 Big-Endian 방식만을 사용하기로 약속 한다.


따라서 시스템이 Little-Endian 방식을 사용할 경우, 네트워크를 통해 데이터를 전송하기 전에 Big-Endian 방식으로 데이터를 변경해서 보내야만 하고, 받을 때도 Little Endian 시스템은 전송되어오는 데이터를 역순으로 조합해야 한다.

또한 sockaddr_in 구조체 안에 존재 하는 모든 data들은 '네트워크 바이트 순서'로 채워져야 한다. 곡 기억 할것


ntohs , htohs

- htons : h to n 즉, Host Byte 순서를 Network Byte 순서로 바꾸어 준다는 의미이다. 뒤에 s 는 short 타입을 의미한다. 따라서 32비트 데이터를 호스트 바이트 순서에서 네트워크 바이트 순서로 바꿔주는 함수다.

- ntohs : n to h 이므로 Network Byte 순서를 Host Byte 순서로 바꾸어 주는 함수이다.