* 설명
big endian, little endian이란, 1바이트 이상의 숫자 표현에서 앞에서부터 저장하냐, 뒤에서부터 저장하느냐의 차이를 나타내는 말이다.
이는 CPU의 연산 방식의 차이로 인한 것으로, 대표적으로 Intel계열과 Risc(UNIX등)방식이 다르다.
Risc방식은 big endian 방식에 따라 앞에서부터 숫자를 저장하나 Intel계열은 little endian 방식으로 뒤에서부터 숫자를 저장한다.
즉, 16진수 두바이트 12FC의 경우,
big endian의 경우 12FC로 기록 되지만,
little endian의 경우 FC12로 기록 된다.
* 문제점
서로 다른 프로세서의 컴퓨터가 통신할때, 데이터 전송 시 저장 방식의 차이로 인하여 큰 혼란을 불러 일으킬 수 있다.
* 해결책
대부분의 네트워크 호스트는 big endian을 사용 하여 연산/통신을 하고 있으므로, Intel계열 프로세서를 사용하는 호스트에서 이를 변환 하는 작업을 하여야 한다.
VC++의 경우 이를 위하여 ntohs, ntohl, htons, htonl 함수를 제공한다.
각각의 의미는 다음과 같다.
- ntohs(network to host short): 2바이트 값을 big->little로 변환
- ntohl(network to host long): 4바이트 값을 big->liitle로 변환
- htons(host to network short): 2바이트 값을 little->big으로 변환
- htonl(host to network long): 4바이트 값을 little->big으로 변환
위의 함수를 이용하여 네트웍에서 데이터를 받자마자 변환하고, 네트웍으로 전송 직전에 변환 하면 된다.
* 참고
리틀 엔디안 순서에 대한 논리는, 수의 값을 증가시킬 때 수의 왼편에 자릿수를 추가해야할 필요가 있을지 모른다는 것이다 (지수가 아닌 경우에, 더 큰 숫자는 더 많은 자릿수를 갖는다). 빅 엔디안으로 정렬되어 저장되어 있는 숫자는 두 숫자를 더한 결과를 저장하기 위해 모든 자릿수를 오른쪽으로 옮겨야하는 일이 종종 발생한다. 그러나 리틀 엔디안 방식으로 저장된 숫자에서는, 최소 바이트가 원래 있던 자리에 그대로 머물 수 있으며, 새로운 자리 수는 최대 수가 있는 주소의 오른쪽에 추가될 수 있다. 이것은 일부 컴퓨터 연산들이 매우 단순해지고 빠르게 수행될 수 있다는 것을 의미한다

Comments List
醫