colorful

zc qq:1337220912

 

PHP的ntohl网络字节序函数及相关知识

http://n3yang.com/archives/2011/12/16/php-function-ntohl/
http://www.w3school.com.cn/php/func_misc_unpack.asp    // php unpack 函数


最近项目中使用到了PHP与C服务器的socket通信,在做数据转换的时候,PHP没有提供对应将网络字节序和机器字节序相互转换的程序,但是根据函数的意义,我们可以做相应的转换来实现这一函数:

1
2
3
4
function ntohl($str){
    $arr = unpack('I', pack('N', $str));
    return $arr[1];
}

函数的意义
程序的作用是将网络字节序和机器字节序进行相互转换。在C/C++、Python、Delphi中都提供了相应的函数“ntohl”和“htonl”,如果是short类型就是“ntohs”和“htons”。下面是这些函数的意义:

ntohl()--"Network to Host Long" htonl()--"Host to Network Long" htons()--"Host to Network Short" ntohs()--"Network to Host Short"

什么是主机字节序
不同的机器字节序不相同,这与使用的CPU有关。不同的CPU在处理高位字节时所存储的顺序是不同的。
例如Intel x86结构下, short型数0×1234表示为34 12, int型数0×12345678表示为78 56 34 12
如IBM power PC结构下, short型数0×1234表示为12 34, int型数0×12345678表示为12 34 56 78

网络字节序
正是由于每个主机的处理顺序有可能不同,所以在网络协议中规定数据从高到低顺序存储,目的是在不同架构的主机中可以正常通信,避免兼容性问题。

posted on 2013-07-29 14:49 多彩人生 阅读(691) 评论(0)  编辑 收藏 引用 所属分类: linux program


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

统计

常用链接

留言簿(3)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜