windows下使用如下常用函数。
代码截图:
下面是测试代码源码:
#include <stdio.h>
#include <iostream>
#include <winsock.h>
#pragma comment(lib,"Ws2_32.lib")
using namespace std;
int main()
{
printf("unsigned long : size:%d.\n\n", sizeof(unsigned long));
unsigned long aa = 0x12345678;
unsigned char* pp = (unsigned char*)(&aa);
printf("主机字节序:%0x %0x %0x %0x\n", pp[0], pp[1], pp[2], pp[3]);
unsigned long bb = htonl(aa); //将主机字节序转化成了网络字节序
pp = (unsigned char*)(&bb);
printf("网络字节序:%0x %0x %0x %0x\n\n", pp[0], pp[1], pp[2], pp[3]);
// 验证IP地址:"239.10.3.1" (点分十进制,属于网络序)
unsigned long l1 = inet_addr("239.10.3.1"); //inet_addr()返回的地址已经是网络字节格式
printf("l1网络序 = %x.\n", l1); // 此时l1是网络序
unsigned long l2 = ntohl(l1);
printf("l2主机序 = %x.\n", l2); // 此时l2是主机序
unsigned long l3 = htonl(l2);
printf("l3网络序 = %x.\n", l3); // 此时l3又是网络序
char *l4 = NULL;
struct in_addr in = { 0 };
memcpy(&in, &l3, sizeof(l3));
l4 = inet_ntoa(in);
printf("l4 ip地址 = [%s].\n", l4); // 此时l4是原始的 点分十进制 IP地址
return 0;
}
运行结果如下:
ntohs =net to host short int 16位
htons=host to net short int 16位
ntohl =net to host long int 32位
htonl=host to net long int 32位
inet_ntoa 将一个 十进制网络字节序 转换为 点分十进制IP格式的字符串。
inet_addr 将一个 点分十进制的IP字符串 转换成 一个长整数型数。