网络序、主机序、点分十进制的IP地址转换

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字符串 转换成 一个长整数型数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值