ntohl函数的问题,有什么用

pengxn 2009-10-12 04:02:46

int itest = 257;
for(int i=0;i<4;i++)
{
cout<<" ["<<i<<"] = "<< int(((char*)(&itest))[i])<<endl;
}
cout<<" itest = "<<itest<<endl;

cout<<" ntohl = "<<ntohl(itest)<<endl;
cout<<" htonl = "<<htonl(itest)<<endl;
return 0;


输出结果:
[0] = 0
[1] = 0
[2] = 1
[3] = 1
itest = 257
ntohl = 257
htonl = 257
...全文
699 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZXW0521 2009-10-12
  • 打赏
  • 举报
回复
257 是0x 0 0 1 1
258 是0x 0 0 1 2

如果换一个表示方法,
会是:
257 是0x 1 1 0 0
258 是0x 2 1 0 0

当有这样差异的时候,
才会出现转换
pengxn 2009-10-12
  • 打赏
  • 举报
回复
257 是0x 0 0 1 1
大小端是不一样的

而且我用258测试也是一样的
[0] = 0
[1] = 0
[2] = 1
[3] = 2
itest = 258
ntohl = 258
htonl = 258
ZXW0521 2009-10-12
  • 打赏
  • 举报
回复
在同一个机器上,没有通过网络,应该不会有大小端定义的变化
wanjingwei 2009-10-12
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20060222/09/4569586.html
这个帖子有详细的讨论
ZXW0521 2009-10-12
  • 打赏
  • 举报
回复
一样的原因,我理解是:
你输出的几个数据,大小端的定义,本来就是一致的,
就像对 正数进行绝对值操作,还得到本身
pengxn 2009-10-12
  • 打赏
  • 举报
回复
不明白

itest = 257
ntohl = 257
htonl = 257
为什么?!
ZXW0521 2009-10-12
  • 打赏
  • 举报
回复
这个函数的作用这样理解,
比如一个整数,0x 12 34 56 78,
在网络上传输时候的顺序有可能是 78 56 34 12,
这个函数把是得到正确的数字
pengxn 2009-10-12
  • 打赏
  • 举报
回复
函数说明我也找的到,希望针对我这个例子的说明

为什么转了以后,还是一样的
ZXW0521 2009-10-12
  • 打赏
  • 举报
回复
ntohl()
  简述:
  将一个无符号长整形数从网络字节顺序转换为主机字节顺序。
  #include <winsock.h>
  u_long PASCAL FAR ntohl( u_long netlong);
  netlong:一个以网络字节顺序表达的32位数。
  注释:
  本函数将一个32位数由网络字节顺序转换为主机字节顺序。
  返回值:
  ntohl()返回一个以主机字节顺序表达的数。
  参见:
  htonl(), htons(), ntohs().

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧