프로그래머의 삶 Programmer's Life/C & C++

byteorder

Oliver's World 2008. 11. 5. 11:15
728x90

#include <winsock2.h>
#include <stdio.h>

int main(int argc, char* argv[])
{
    WSADATA wsa;
    if(WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
        return -1;

 SOCKET tcp_sock = socket(AF_INET, SOCK_STREAM, 0);
 
    u_short x = 0x1234;
    u_long y = 0x12345678;

    u_short x2;
    u_long y2;

 u_short *a=&x2;
 u_long *b=&y2;
 u_short *c=&x;
 u_long *d=&y;
 

 WSAHtons(tcp_sock, x, a);
 WSAHtonl(tcp_sock, y, b);
    // 호스트 바이트 -> 네트워크 바이트
    printf("호스트 바이트 -> 네트워크 바이트\n");
    printf("0x%x -> 0x%x\n", x, x2);
    printf("0x%x -> 0x%x\n", y, y2);

 WSANtohs(tcp_sock, x2, c);
 WSANtohl(tcp_sock, y2, d);
    // 네트워크 바이트 -> 호스트 바이트
    printf("네트워크 바이트 -> 호스트 바이트\n");
    printf("0x%x -> 0x%x\n", x2, x);
    printf("0x%x -> 0x%x\n", y2, y);

 
 //잘못된 사용 예
 /*WSAHtonl(tcp_sock, x, a);
 printf("잘못된 사용 예 \n");
 printf("0x%x -> 0x%x\n", x, y); */
 
    WSACleanup();
    return 0;
}

728x90