ip地址和整数转换
2013-02-10 22:08
253 查看
inet_addr函数
地址转换, 把"A.B.C.D"的IP地址转换为32位长整数
[声明]
unsigned long inet_addr ( const char FAR *cp );
[参数]
cp - 指向IP地址字符串的指针
[返回值]
当函数成功调用时返回用32位整数表示的IP地址
失败时返回INADDR_NONE.
实际是就是一个按位的排列,
比如 A.B.C.D的换成整数就是:
(((A*256)+B)*256+C)*256+D
1409823698 = 540833D2 H => 以字节分解: 54H 08H 33H D2H => 转回10进制: 84 08 51 210
看明白了吗?
就是把每个段分别转为16进制,合并成整型:
1409823698 = (84 shl 24) or (8 shl 16) or (51 shl 8) or 210
合并转为整型后因为最高位可能会是1,所以可能会出来负值,不用管它就行了。
实例:
uses WinSock;
ShowMessage(IntToStr(inet_addr('192.168.0.1')));
整数转化为ip
Vc:
char* DottedDecimal(unsigned long ulAddr)
{
static char szAddr[16] = {0};
unsigned long ulMask[4] = {0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000};
for (int i = 0; i < 4; i++)
{
long l = (ulAddr & ulMask[i]) >> (i * 8);
ltoa(l, szAddr + strlen(szAddr), 10);
if (i != 3)
strcat(szAddr, ".");
}
return szAddr;
}
逆函数,网上查的:
7、将网络地址转换为用点分割的IP地址,是上面函数的逆函数。
char FAR * inet_ntoa( struct in_addr in );
举例:char * ipaddr=NULL;
char addr[20];
in_addr inaddr;
inaddr. s_addr=16777343;
ipaddr= inet_ntoa(inaddr);
strcpy(addr,ipaddr);
这样addr的值就变为127.0.0.1。
地址转换, 把"A.B.C.D"的IP地址转换为32位长整数
[声明]
unsigned long inet_addr ( const char FAR *cp );
[参数]
cp - 指向IP地址字符串的指针
[返回值]
当函数成功调用时返回用32位整数表示的IP地址
失败时返回INADDR_NONE.
实际是就是一个按位的排列,
比如 A.B.C.D的换成整数就是:
(((A*256)+B)*256+C)*256+D
1409823698 = 540833D2 H => 以字节分解: 54H 08H 33H D2H => 转回10进制: 84 08 51 210
看明白了吗?
就是把每个段分别转为16进制,合并成整型:
1409823698 = (84 shl 24) or (8 shl 16) or (51 shl 8) or 210
合并转为整型后因为最高位可能会是1,所以可能会出来负值,不用管它就行了。
实例:
uses WinSock;
ShowMessage(IntToStr(inet_addr('192.168.0.1')));
整数转化为ip
Vc:
char* DottedDecimal(unsigned long ulAddr)
{
static char szAddr[16] = {0};
unsigned long ulMask[4] = {0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000};
for (int i = 0; i < 4; i++)
{
long l = (ulAddr & ulMask[i]) >> (i * 8);
ltoa(l, szAddr + strlen(szAddr), 10);
if (i != 3)
strcat(szAddr, ".");
}
return szAddr;
}
逆函数,网上查的:
7、将网络地址转换为用点分割的IP地址,是上面函数的逆函数。
char FAR * inet_ntoa( struct in_addr in );
举例:char * ipaddr=NULL;
char addr[20];
in_addr inaddr;
inaddr. s_addr=16777343;
ipaddr= inet_ntoa(inaddr);
strcpy(addr,ipaddr);
这样addr的值就变为127.0.0.1。
相关文章推荐
- 【华为 OJ 】整数与IP地址间的转换
- IP地址与整数之间的转换
- C# IP地址和整数之间的转换,IP地址和数字ip地址的转换
- 华为OJ(整数与IP地址间的转换)
- 整数与IP地址间的转换
- android 整数与ip地址的转换
- IP地址与Long整数之间的转换
- JS中IP地址与整数相互转换的实现代码
- IP地址转、整数互相转换
- 用C把整数转换成Ip地址
- 华为OJ——整数与IP地址间的转换
- C/C++整数与IP地址间的转换
- ip地址与整数互相转换
- js将ip地址转换成整数
- IP地址与整数之间的转换
- C# IP地址与整数之间的转换
- Java算法---整数与IP地址间的转换
- 【华为OJ】【030-整数与IP地址间的转换】
- ip地址与整数之间的转换
- 整数与IP地址间的转换