반응형

바이트 순서와 네트워크 바이트 순서 예제

 

 

앞서 배운 4개의 함수들의 사용 예제를 봐보자.

 

-

 

byteorder_convert.c
0.00MB

 

 

 

 

-

 

이제 위 사진의 내용을 이해해보자

 

-

 

6, 8번째 줄 : 각각 2byte, 4byte 데이터를 변수에 저장한다.

 

물론 위 예제를 실행하는 시스템의 CPU에 따라서 저장되는 바이트 순서는 다르다.

 

-

 

11, 12번째 줄 : 변수 host_port와 host_addr에 저장된 데이터를 네트워크 바이트 순서로 변환하고 있다.

 

만약 위 예제를 리틀 엔디안 기준으로 정렬하는 CPU상에서 실행한다면

 

바이트 순서가 네트워크 바이트 순서로 바뀐 값이 반환되어 변수에 저장된다.

 

-

 

 

-

 

위 사진의 실행 결과는 리틀 엔디안 방식으로 정렬하는 CPU에서의 실행결과이다.

 

참고로 Intel, AMD 계열의 CPU가 모두 리틀 엔디안을 기준으로 정렬한다.

 

-

 

※ 데이터 전송하기 전에 다 바꿔줘야 할까 ※

 

데이터 송수신 기준이 네트워크 바이트 순서다 보니,

 

데이터를 전송하기 전에 직접 네트워크 바이트 순서로 데이터를 변경해야 한다고 생각하고,

 

수신된 데이터도 호스트 바이트 순서로 변경해서 저장해야 한다고 생각할 수 있다.

 

만약 데이터 송수신 과정에서 네트워크 바이트 순서를 기준으로

 

자동으로 변환이 이뤄지지 않는다면 당연히 그리해야 한다.

 

하지만 이렇게 복잡한 일을 프로그래머에게 강요하진 않는다.

 

이러한 변환은 자동으로 이뤄지기 때문에

 

sockaddr_in 구조체 변수에 데이터를 채울 때 이외에는 바이트 순서를 신경 쓰지 않아도 된다.

반응형

+ Recent posts