hp将数据打包成二进制pack及解包unpack
最小单位为字节,即8位,虽说是打包成二进制,但是一般以十六进制来表示,两个十六进制表示一字节,如:0x12, 0x2a,注意,我们是无法通过编辑器来输入十六进制的,我们的输入0x12,对应的是四个字符,占用四个字节,意义是不一样的。当我们打开一段数据,计算机是要利用内存中的一个或多个字节去匹配ASCII或者unicode等字符集来显示内容的,所以我们可以使用ASCII和unicode来重新组装数据,混淆显示,起到加密的效果,当然,由于能操作的最小单位为字节,而ASCII字符集都是一个字节以内的,所以单个字符的显示操作不了。而数值型的变化则比较大。
还有就是,一个变量的显示和其实际的存储的内容不是一样的。比如,字符串ab,在内存中占两个连续的字节<0x61><0x62>,现在在ab中加入
一个NUL字符,即<0x61><0x00><0x62>,实际的显示还是ab,但是传输给其他地方并不是ab。
打包成二进制的好处:
数据通信(通过二进制格式与其它语言通信)
数据加密(如果不告诉第三方你的打包方式,对方解包的难度就相对很大)
节省空间(比如比较大的数字按字符串储存会浪费很多空间,打包成二进制格式才需要4位<32位数字>)
相关函数
pack() , unpack() , ord()
pack( string $format [, mixed $args [, mixed $... ]] )
将数据打包成二进制字符串。
有符号值和无符号值之间的区别只影响函数unpack(), 在那些使用有符号和无符号格式代码的地方pack()函数产生相同的结果。
如果你提供的参数比 $format 要求的少,pack 假设缺的都是空值。如果你提供的参数比 $format 要求的多,那么多余的参数被忽略。
返回值 string
unpack($format, $data)
解开二进制包,format 里面读取的长度应小于 data的长度,否则会报错。
返回值为array
如果format