php 打包 二进制数据,php将数据打包成二进制pack及解包unpack

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值