Neoteny

반응형

H : Host
To
N : network(빅엔디안)
S : short (16bit)
L : long (32bit)


인텔이나 AMD는 리틀엔디안

htonl
htons
ntohl
ntohs


1234를 메모리에 저장하는 경우

빅엔디안 1234 리틀엔디안 4321

* 빅엔디안 리틀엔디안

보통 워드 단위로 구분(4byte)
메모리는 무조건 낮은 번지 부터 1000, 1001, 1002, 1003
저장도 낮은 번지부터 읽는것도 낮은 번지 부터
0x01020304가
빅엔디안 에서는 낮은번지에 큰숫자 즉 0x1000000 에서 1이 있는쪽,
0x000001에서 1있는 쪽은 같은 1이라도 작은 숫자기이 때문이다.

리틀엔디안 실험


#include<iostream>
using namespace std;
int main()
{
 int memory[2];
 memory[0]=0x01020304;
 memory[1]=0x05060708;
 char *pmemory=(char *)&memory;
 for(int i=0;i<sizeof(memory);i++,pmemory++)
  cout << "Address : 0x" << (int *)pmemory << ", Value : " << (int)*pmemory << endl;
 return 0;
}


 결과 : 4 3 2 1 8 7 6 5



중요!!
http://blog.daum.net/dhyi123/4141365



* 비트(bit) / 바이트(byte) / 워드(word)

비트, 바이트, 워드는 컴퓨터의 데이터 단위 또는 메모리의 단위를 표시하기 위해 사용한다.


비트(bit)는 컴퓨터 메모리의 기본적인 구성 요소이다.
가장 작은 단위의 메모리를 비트(bit)라고 한다. 비트는 0 또는 1 두 값 중의 하나만 표현할 수 있다(비트 'off' 또는 'on'으로 설정되었다고 말하기도 한다). 1비트에 많은 정보를 저장할 수는 없지만, 컴퓨터에는 엄청난 수의 메모리가 있다.

바이트(byte)는 컴퓨터 메모리의 통상적인 단위다. 거의 모든 컴퓨터에서 1 바이트는 8비트이며, 적어도 저장 단위를 측정하는 데 있어서 이것이 표준적인 정의다(그렇지만 C 언어는 다른 정의를 가지고 있다. -char 형-).

각 비트가 0이나 1의 두 가지 값을 가질 수 있으므로 1바이트가 가실 수 있는 비트 패턴은 256가지가 된다.

예를 들면, 이러한 패턴들은 0에서 255 까지의 정수를 표현하거나 문자 집합을 표현하는데 사용한다.

표현 양식은 2진 코드를 사용하여 나타내는데 2진 코드는 숫자를 표현하기 위해 0과 1의 조합을 사용하는 코드이다.

워드(word) 는 컴퓨터 설계시 정해지는 메모리의 기본 단위를 의미한다.

예를 들어, 애플과 같은 8비트 컴퓨터에서는 1바이트가 1워드이고, 80256 프로세서를 사용하는 IBM 호환 16비트 컴퓨터에서는 16 비트, 즉 2 바이트가 1 워드이며, 80386, 80486, Pentium PC와 Macintosh PowerPC는 32 비트, 즉 4바이트가 1워드가 된다.


빅 엔디안에서는 1을 저장하면 0x1~~~로 저장하고 1을 읽을때 0x1~~ 부터 읽는다.
리틀 엔디안에서는 1을 쓸때 0x000000~1로 쓰고 읽을때 0x~~~1 부터 읽는다.
아- 헷갈려 ㅠ
반응형