用程序实现IP地址的几种转换方法

前段时间有个网友问我在sql server中怎么转换一个int的ip的地址为xxx.xxx.xxx.xxx,ip地址在计算机中是按4个字节存储的,下面给出机种转换方法,相反转换参考下面的自己实现。

1.sql server的T-SQL转换
declare @a bigint
declare @b1 INT
declare @b2 int
declare @b3 int
declare @b4 int
declare @c int
select @a=-1062729436+4294967295+1 --转换为无符号整型,即原值+FFFFFFFF+1
print @a
select @b1=@a % 256
select @c=(@a-@b1)/256
select @b2=@c%256
select @c=@a/65536
select @b3=@c%256
select @c=@a/16777216
select @b4=@c%256
print convert(varchar(3),@b4)+'.'+convert(varchar(3),@b3)+'.'+convert(varchar(3),@b2)+'.'+convert(varchar(3),@b1)
2.C语言来转换
int ip=-1062729436;
String s;
BYTE b[4];
memcpy(b,(void*)&ip,4);
s.sprintf("%d.%d.%d.%d",b[3],b[2],b[1],b[0]);
ShowMessage(s);
3.C语言更简单的转换方法
int ip=-1062729436;
String s;
BYTE *b;
b=(BYTE*)&ip;
s.sprintf("%d.%d.%d.%d",b[3],b[2],b[1],b[0]);
ShowMessage(s);
4.采用移位来转换
int ip=-1062729436;
String s;
BYTE b[4];
b[0]=(BYTE)ip&0xFF;
b[1]=(BYTE)((ip>>8)&0xFF);
b[2]=(BYTE)((ip>>16)&0xFF);
b[3]=(BYTE)((ip>>24)&0xFF);
s.sprintf("%d.%d.%d.%d",b[3],b[2],b[1],b[0]);
ShowMessage(s);
5.采用winsock函数
int ip=-1062729436;
struct   in_addr   ina;
ina.S_un.S_addr   =   htonl(ip);
char s[20];
strcpy(s,inet_ntoa(ina));
ShowMessage(s);

 


 

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值