1遮斥、十六進制的IP地址轉(zhuǎn)換為點分十進制
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdint.h>
#include<arpa/inet.h>
int main(int argc, char**argv)
{
if (argc <= 1)
{
exit(0);
}
char* str = argv[1];
printf("%s %d %d %d\n", str, strlen(str), sizeof(str), atoi(str));
uint32_t tt ;
sscanf(str, "0x%x", &tt);
uint32_t t2 = htonl(tt);
struct in_addr inaddr;
inaddr.s_addr = t2;
char buf[128];
// 沒問題
inet_ntop(AF_INET, &t2, buf, 128);
//也沒問題
//inet_ntop(AF_INET, &inaddr, buf, 128);
printf("%s\n", buf);
}
編譯峦失;> g++ -o hex2dd hex2dd.c
運行:./hex2dd 0x8002c2f2
結(jié)果:128.2.194.242
2、點分十進制轉(zhuǎn)換為十六進制輸出
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdint.h>
#include<arpa/inet.h>
int main(int argc, char**argv)
{
if (argc <= 1)
{
exit(0);
}
char* str = argv[1];
struct in_addr inaddr;
inaddr.s_addr;
//沒有做返回值判斷
inet_pton(AF_INET, str , &inaddr);
printf("%x\n", ntohl(inaddr.s_addr));
}
編譯术吗;> g++ -o dd2hex dd2hex.c
運行:./dd2hex 128.2.194.242
結(jié)果:0x8002c2f2