반응형
소켓에서 hton, ntoh함수
두 함수는 리틀 엔디안, 빅 엔디안을 사용하는 체계에서 빅엔디안 또는 리틀엔디안으로 변환해주는 함수이다. TCP/IP는 빅 엔디안 방식을 사용하므로 리틀 엔디안 체제에서 사용시 빅 엔디안으로의 자료 변환이 필요하다. 때문에 네트워크 소켓통신에서 빅엔디안, 리틀 엔디안을 다뤄야 한다. 시스템마다 빅엔디안 리틀엔디안 사용이 다르지만 보통은 빅엔디안을 사용한다 하지만 리틀엔디안을 사용하는 경우 빅엔디안형식으로의 변환이 필요하다.
Big-endian Little-endian
빅 엔디안은 시작 주소에 데이터의 최상위 비트(MSB)가 오도록 저장한다.
리틀 엔디안은 시작주소에 최하위 비트(LSB)가 오도록 저장한다.
4byte int 0x1234
a | a+1 | a+2 | a+3 | |
Big-endian | 0x12 | 0x34 | 0x56 | 0x78 |
Little-endian | 0x78 | 0x56 | 0x34 | 0x12 |
htons htonl ntohs ntohl함수
htons 함수는 2byte(short형) 데이터에 대해 호스트 바이트 순서를 빅 엔디안 바이트 순서로 변환할 때 사용한다. htonl는 (4byte) 데이터를 사용하는 차이만 있을 뿐 동일 한 기능이다.
반대로 ntohs 는 2byte 데이터에 대해 호스트 바이트 순서를 리틀 엔디안 바이트 순서로 변환할 때 사용한다. ntohl역시 (4byte)데이터를 다루는 차이만 있다.
#include <netinet/in.h>
R=htonl(unsigned long data)//return unsigned long
R=htons(unsigned char data)//return unsigned char
R=ntohl(unsigned long data)//return unsigned long
R=ntohs(unsigned char data)//return unsigned char
netinet/in.h 헤더를 포함 해야한다.
728x90
반응형
'Programming > Socket' 카테고리의 다른 글
[C/C++/소켓프로그래밍] Socket이란? (0) | 2021.03.13 |
---|---|
[C/C++/소켓프로그래밍] Hostent란? (0) | 2021.03.12 |
[C/C++/소켓 프로그래밍] IP 주소 형식 변환 aton() ntoa() 이진형식으로의 변환 (0) | 2021.03.10 |
C 소켓프로그래밍 Socketpair (0) | 2021.03.06 |
PF_INET과 AF_INET (0) | 2021.03.03 |
댓글