허허... 왜 이러십니까?
hex code, 16 진수로 말합시다.
예를 들어서 원하는 p 위치에 0x1234가 있다면...
바이너리로는 0001 0010 0011 0100 이어야 하겠죠?
그런데 메모리에 위의 순서대로 들어가 있다고 칩시다.
여기서 위의 앞의 바이트와 뒤의 바이트를 바꾸고 싶다면?
unsigned short a = (unsigned short)(*((unsigned char *)p + 0));
unsigned short b = (unsigned short)(*((unsigned char *)p + 1));
unsigned short c = (a << 8) + b;
포인터 p에 저장되어
포인터 p에 저장되어 있는 16비트 big endian 데이터를 가져오는 매크로입니다.
(host가 little endian이건 big endian이건 상관없이)
대충 풀어서 쓰면...
가 되니까요.
Little일떄는 좀.. 이상한거 같은데요.. ㅜㅜ
제가 잘 이해를 못해서 그런거 같은데요..
p ="1234"라면
big Endian이면
p + 0 = 12
p + 1 = 34이고
p + 0 8bit 쉬프트 하면
12가 00001100 이므로
00001100 00000000이 된다.
34는 00010010이므로
p + 0 | p + 1 = 00001100 00010010 이 되고,
12 34가 되는데;;
Little Endian이면
p+0 = 34 이고
p+1 = 12 이므로
p+0 8비트 쉬프트 하면
00010010 00000000 이되고
p+1 은 00000000 00001100이 되는거 아닌가요?
그럼 p+0 | p+1 = 00010010 00000000
or
00000000 00001100
00010010 00001100
34 12
빅으로 안바뀌고.. 그래도인데;;
무엇을 잘못 본건지요?? ㅜㅜ
Fly to the SKY~~~~~~
"According to your faith, be it unto you!!"
허허... 왜
허허... 왜 이러십니까?
hex code, 16 진수로 말합시다.
예를 들어서 원하는 p 위치에 0x1234가 있다면...
바이너리로는 0001 0010 0011 0100 이어야 하겠죠?
그런데 메모리에 위의 순서대로 들어가 있다고 칩시다.
여기서 위의 앞의 바이트와 뒤의 바이트를 바꾸고 싶다면?
unsigned short a = (unsigned short)(*((unsigned char *)p + 0));
unsigned short b = (unsigned short)(*((unsigned char *)p + 1));
unsigned short c = (a << 8) + b;
가 되겠습니다.
unsigned short c = (a << 8)
가 되겠습니다.
그래서 c에는 0x3412가 들어가 있겠죠?
아.. 그래도.. 잘 이해가 않됩니다. ㅜㅜ
좀더 자세히점.. ㅜㅜ
Fly to the SKY~~~~~~
"According to your faith, be it unto you!!"
#define GET16(p) ((_u16) *
#define GET16(p) ((_u16) * ((_u8*)(p)+0) << 8 | (_u16) * ( (_u8*)(p)+1) )
시스템(CPU 타입)들이 같은 정수값도 바이트단위 저장방식이 다릅니다.
big endian 은 2바이트 정수가 바이트열로 볼때 8의 배수로 높은 자리를 2번째 바이트로 저장합니다.
little endian 은 0xff 를 & 연산한 작은 자리를 2번째 바이트에 저장합니다.
위 매크로는 첫번째 바이트를 left shift 8 bit 해서 큰 자리로 쓰고, 두번째 바이트를 낮은 자리에 썼습니다. (little endian 방식의 숫자를 가져온 겁니다)
일반적으로 네트웍을 통해 숫자를 바이트열에 담아 던집니다.
little endian 방식의 시스템에서 생성한 숫자바이트열을 big endian 방식의 시스템에서 받아서 숫자로 변경하는 코드네요.
혹은 little endian 방식의 시스템에서 그대로 써도 동일한 결과 입니다. 숫자 자체가 아니라 정수를 바이트로 접근할때 숫자로 바꾸는 방식입니다.
첫번째 분의 답변이 거꾸로 되었네요.
ㅎ.. 드뎌 확실히 이해가 되였습니당..
^^ 답글달아주신분들 모두 감사드립니당~~
Fly to the SKY~~~~~~
"According to your faith, be it unto you!!"
댓글 달기