티스토리 뷰

하두 헷갈려서 정리함



xxx.xxx.xxx.xxx 의 주소를 Big-Endian의 unsigned long 으로 변환하는 함수



#include <arpa/inet.h>

unsigned long inet_addr(const char *string);


오류시 -1를 반환한다





#include <arpa/inet.h>

int inet_aton(const char *string, struct in_addr *addr);


실패시 0, 성공시 0이 아닌값이 리턴된다

성공시 addr에 network order로 값이 저장된다




network order값의 32비트 값을 xxx.xxx.xxx.xxx 주소값으로 변환

struct in_addr 의 구조체가 넘어감


#include <arpha/inet.h>

char* inet_ntoa(struct in_addr addr);


변환값이 inet_ntoa 내부 static 변수에 저장이 되며, 그 주소값이 반환된다.




예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
#include <arpa/inet.h>
int main(int argc, char *argv[])
{
    char *addr1 = "1.2.3.4";
    char *addr2 = "1.2.3.256";
    unsigned long conv_addr;
    struct sockaddr_in addr_inet;
    conv_addr = inet_addr(addr1);
    if (conv_addr == INADDR_NONE)
        printf("Error occur(inet_addr) : %d \n", conv_addr);
    else
        printf("Unsigned long addr(network order)(inet_addr) : %x \n", conv_addr);
    conv_addr = inet_addr(addr2);
    if (conv_addr == INADDR_NONE)
        printf("Error occur(inet_addr) : %d \n", conv_addr);
    else
        printf("Unsigned long addr(network order)(inet_addr) : %x \n", conv_addr);
    if (inet_aton(addr1, &addr_inet.sin_addr))
    {
        printf("Unsigned long addr(network order)(inet_aton) : %x\n", addr_inet.sin_addr.s_addr);
        printf("Address(inet_ntoa) : %s\n", inet_ntoa(addr_inet.sin_addr));
    }
    else
        printf("Error\n");
    return 0;
}
cs


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함