int x=0x12345678;
으로 놓고,
unsigned char *xp = (char *)&x;
printf(" 바이트 순서 : %x %x %x %x", xp[0], xp[1], xp[2], xp[3]);
이렇게 하면 숫자가 12 34 56 78 혹은 78 56 34 12 순으로 쪼개져서 나온다는데, 어째서인지 모르겠음...
배열의 이름이 포인터 역할을 한다고 알고 있는데, 포인터만 선언해도 배열처럼 쓰는게 가능한가?
char형이라서 두개씩 쪼개져 나오는건가?(인트가 4, 차가 1이니까??)
나름대로 추측해봤는데 뭐가뭔지; 설명좀
엔디안은 바이트 순서가 아니라 비트 순서가 뒤바뀐 거임.
2진수를 메모리에 저장할 때 낮은 자리부터 저장할래, 높은 자리부터 저장할래의 차이.
참고로 이 말의 유래는 걸리버 여행기. 그 달걀을 뭉툭한 끝 (big end)을 깔까, 뾰족한 끝 (little end)을 깔까 논쟁이 소설 중간에 나오잖아 ㅋㅋ 그걸 주장하는 사람들을 빅 엔디언, 리틀 엔디언이라고 하는데 거기서 유래한 명칭.
빅 엔디안은 큰 자리부터, 즉 높은 자리부터 저장한다는 거고 리틀 엔디안은 낮은 자리부터 저장하는 거임.
바이트오더 순서바뀌는거 맞을낀데?
이진수로 abcdefgh ijklmnop면 빅 엔디안은 메모리에 순서대로 a b c d e f g h i j k l m n o p가, 리틀 엔디안은 p o n m l k j l h g f r d c b a를 저장해.
글쓴이에게: 어째서냐면 그렇게 만들어졌기 때문임
씹죶 // 이진수가 맞음. 비트 필드랑 일반 정수 타입이랑 공용체로 묶어서 값 뽑아보면 알잖.
공용체로 비트 필드랑 일반 정수 데이터랑 묶어 보면 비트 단위로 접근할 때도 엔디안의 영향을 받음.
바이트가 맞을거다 글쓴이도 78 56 34 12 순이라고 하잔니
바이트만 바뀌는 게 아니라는 거. 프로그래머 눈엔 바이트 단위로만 바뀐 걸로 보이는데 그건 프로그램이 접근할 수 있는 가장 작은 메모리 접근 단위가 바이트라 그런 거고.
78 56 34 12는 바이트 단위로 끊어서 16진수로 표기한 거고. 2바이트 단위로 끊으면 5678 1234가 되겠지.
4바이트로 끊으면 12345678이 될 거고.
비트로 끊으면 낮은 자리부터 높은 자리 순이 될 거라는 거. 리틀 엔디안 상으로.
비트 필드 구조체랑 일반 정수 데이터를 공용체로 묶어본 뒤 비트 값 접근해 보면 답이 나오는 부분.
비트필드를 한번도 안써봤는데 그렇게 동작한다이거지? 굳정보이군 똑똑하내 ㅅㅅ
http://ideone.com/RlEnfV
를 보면 명약관화.