이번엔 엔디안에 대해 써보고자 한다..
엔디안이란 데이터를 메모리에 넣는 순서를 정하는거라고 생각하면 될 것 같다. (내맘대로 생각...)
(https://ko.wikipedia.org/wiki/%EC%97%94%EB%94%94%EC%96%B8) 나무위키도 함 봐보자!
그러면 이러한 엔디안은 어떠한 것들이 있는가?
단 2가지 뿐이다.
Big-Endian(빅엔디안), Little-Endian(리틀엔디안)
그렇다면 빅엔디안과 리틀엔디안의 차이는 무엇인가?
아까 말했듯 데이터에 넣는 순서가 다르다는 것..
예시로 확인해보자.
Int32 Type의 TEMP_INT 라는 변수가 있다고 생각해보자.
1
|
int TEMP_INT = 123456789
|
cs |
이렇게 변수가 있다면... 이 변수는 과연 4바이트 메모리에 어떻게 들어갈것인가??
일단 12345678를 hex데이터로 변경한다면
이렇게 0x075BCD15 4바이트로 존재할 것이다....
그러면 차례대로
07 5B CD 15 이렇게 들어갈것인가??
과연?? 코드로 해보자
간단하게 작성하고... ( ToString() 사용법은 추후에 한번 더 다시 올려야겠다.. 쓰잘데기없이 길게 적었어...)
Label에 데이터를 표시하도록 하였다... 그리하면... 과연..
이렇게 나온다... 예상한것과는 반대...15가 먼저 나오고.. 그다음 CD, 5B, 07
이렇게 작성되는것이 리틀엔디안이다...
이렇게 큰수를 넣으니 잘 모르겠는것도 있겠지... 좀 작은수로 생각해보자..
1234로 생각한다면.. Hex값은 04D2가 될 것이고...
4바이트로 생각한다면.. 00 00 04 D2라고 생각하는게 맞고... 이게 메모리에 들어간다면...
이렇게 D2 04 00 00로 들어간다. 계산기와는 값이 다르다.....
이것이 리틀엔디안인것이다... 우리가 일반적으로 계산한 정보대로 들어가는 것이 아닌 한번 반대로 바뀌는..!!!
그렇다면 빅엔디안으로 저장한다면 어떻게 될까??
뭘 어떻게 되겠는가 00 00 04 D2로 들어가지....
엔디안은 이렇게 리틀과 빅으로 나누어져있는데 나누어지는 조건은 무엇인가?
보통 엔디안은 CPU에 따라 갈라진다..
이런식으로....
그리하여 데이터를 통신등으로 받으면 내 엔디안을 확인하여 엔디안을 교환해주는 방법을 생각해야한다.
엔디안을 확인하는 방법은...
1
|
BitConverter.IsLittleEndian
|
cs |
간단!!!!
다들 엔디안을 잘 생각해보도록...!!!
최종 엔디안 확인 프로그램은 요기
내 프로그램이 아니고.... 인터넷에서 간단하게 해당 엔디안값을 확인해보려면 여기를 이용해보자
(https://www.scadacore.com/tools/programming-calculators/online-hex-converter/)