검색결과 리스트
byte order에 해당되는 글 1건
- 2011.03.08 바이트 오더링(byte ordering)
글
바이트 오더링(byte ordering)
네트워크로그
2011. 3. 8. 15:04
바이트 오더는 데이터가 바이트 단위로 메모리에 저장되는 순서를 의미하며 각 CPU 벤더 의존적인 특징을 가지고 있다.
크게 Big endian과 Little endian 방식이 존재하며, Little Endian을 사용하는 대표적인 벤더가 인텔이며, Big endian을 사용하는
벤더가 AMD 이다. 이기종 간에 통신을 하는 네트워크 프로그래밍에서는 두 종단 간에 올바로 통신하기 위해서는 통일된
방식이 필요하게 되는데, 네트워크 바이트 오더 표준은 Big Endian 방식이다. 네트웍을 통한 데이터 전송은 Big Endian을 통해
전송하며, 데이터를 송수신 하는 곳에서는 각자의 플랫폼에 맞는 바이트 오더의 변환이 필요하게 된다. 물론 바이트 오더는
2바이트 이상의 프리미티브 타입에 적용되는 내용이다. 1바이트 단위의 문자열 데이터는 바이트 오더의 변경이 불필요하기
때문이다.
크게 Big endian과 Little endian 방식이 존재하며, Little Endian을 사용하는 대표적인 벤더가 인텔이며, Big endian을 사용하는
벤더가 AMD 이다. 이기종 간에 통신을 하는 네트워크 프로그래밍에서는 두 종단 간에 올바로 통신하기 위해서는 통일된
방식이 필요하게 되는데, 네트워크 바이트 오더 표준은 Big Endian 방식이다. 네트웍을 통한 데이터 전송은 Big Endian을 통해
전송하며, 데이터를 송수신 하는 곳에서는 각자의 플랫폼에 맞는 바이트 오더의 변환이 필요하게 된다. 물론 바이트 오더는
2바이트 이상의 프리미티브 타입에 적용되는 내용이다. 1바이트 단위의 문자열 데이터는 바이트 오더의 변경이 불필요하기
때문이다.
Big endian과 Little endian 간의 차이를 다음 그림을 통해 알아보자
Big-endian은 가장 최상위 바이트(0A)가 가장 낮은 메모리 주소에 저장되는 방식이다.
Little-endian은 가장 최상위 바이트(0A)가 가장 높은 메모리 주소에 저장되는 방식이다.
다음은 위의 개념을 이용하여 공용체로 바이트 오더를 알아보는 간단한 프로그램이다.
#include <stdio.h>
int main(int argc, char **argv){
union {
short s;
char c[sizeof(short)];
} un;
un.s = 0x0102;
if (sizeof(short) == 2) {
if (un.c[0] == 1 && un.c[1] == 2)
printf("big-endian\n");
else if (un.c[0] == 2 && un.c[1] == 1)
printf("little-endian\n");
else
printf("unknown\n");
} else{
printf("sizeof(short) = %d\n", sizeof(short));
}
return 0;
}
'네트워크로그' 카테고리의 다른 글
| [FTP] (2) 클라이언트 구현하기 (0) | 2011.03.09 |
|---|---|
| [FTP] (1) FTP(File Transmission Protocol) 프로토콜 이해 (0) | 2011.03.09 |
| 바이트 오더링(byte ordering) (0) | 2011.03.08 |
| OAuth의 세부사항 (0) | 2011.01.01 |
| OAuth의 개념과 대략적인 흐름 (0) | 2010.12.31 |