当前位置:硬件测评 > PHP中pack和unpack函数的使用详解

PHP中pack和unpack函数的使用详解

  • 发布:2023-10-06 07:23

$string = pack('a6', 'china '); var_dump($字符串); //输出结果:string(6)“china”,最后一个字节不可见NUL 回声命令($字符串[5]); //输出结果:0(ASCII码中的0对应nul) //类似A $string = pack('A6', '中国'); var_dump($字符串); //输出结果:string(6)“china”,最后一个字节为空格 回声命令($字符串[5]); //输出结果:32(ASCII码中的32对应一个空格)

登录后复制

[图片上传失败...(image-5d8a61-1577941896554)]

自带ASCII表(linux/unix下可以使用man ascii查看)

h 和 H

$string = pack('H3', 281);
var_dump($字符串); //输出结果:string(2)“(“
for($i=0;$i
登录后复制

h,H需要特别说明。他们将相应的参数视为十六进制字符,然后进行打包。这意味着什么?例如上面的281在打包之前会被转换为0x281,因为一位十六进制数字对应四位二进制数字。上面的0x281只有1.5个字节,默认会补0变成0x2810,即0x28对应的十进制。是40((),0x10对应的小数是16(le看不见的字符)。

c 和 C

$string = pack('c3', 67, 68, -1);
var_dump($字符串); //输出:字符串(3)“CD�”for($i=0;$i
登录后复制

最终输出应该是67 68 -1

ord 获取字符的 ASCII 码(范围 0-255)。此时-1(0000 0001)对应的字符将以补码的形式输出,即255(1111 1110 + 0000 0001 = 1111 1111)

整数相关

所有整数类型的使用方式完全相同。只需注意它们的位和字节顺序即可。下面以L为例:

$string = pack('L', 123456789);
var_dump($字符串); //输出:字符串(4)“�[“

for($i=0;$i
登录后复制

f和d

$string = pack('f', 12345.123);
var_dump($字符串);
//输出:string(4) "~�@F"
var_dump(unpack('f', $string)); //这里提前使用了unpack,后面会解释
//输出:float(12345.123046875)
登录后复制

f和d打包为浮点数。至于为什么打包前是12345.123,解包后是12345.123046875,这和浮点数的存储有关系。

x、X、Z、@

$string = pack('x'); //打包一个null字符串
回显命令($字符串); //输出:0
登录后复制

关于X(大写

$string = pack('Z2', 'abc5'); //其实就是从Z后面的数字位置开始,全部设置为nul
var_dump($字符串); //输出:字符串(2)“a”for($i=0;$i
登录后复制
$string = pack('@4'); //我理解为填充N nul
var_dump($字符串); //输出:字符串(4)“”
for($i=0;$i
登录后复制

解压

array unpack ( string $format , string $data ) 
登录后复制

unpack 的使用非常简单。它只是讲对pack打包的数据进行解包。使用打包时使用的任何参数。开箱,具体用法我懒得讲了,举几个小例子:

$string = pack('L4', 1, 2, 3, 4);
var_dump(unpack('L4', $string));
//输出:
数组(4){
[1]=>
整数(1)
[2]=>
整数(2)
[3]=>
整数(3)
[4]=>
整数(4)
}

$string = pack('L4', 1, 2, 3, 4);
var_dump(unpack('Ll1/Ll2/Ll3/Ll4', $string)); //可以指定key并用/分割
//输出:
数组(4){
[“l1”]=>
整数(1)
[“l2”]=>
整数(2)
[“l3”]=>
整数(3)
[“l4”]=>
整数(4)
}
登录后复制

这两个功能有什么用

·数据通信(通过二进制格式与其他语言通信)

·数据加密(如果不告诉第三方你的打包方式,对方拆包会比较困难)

·节省空间(例如将比较大的数字存储为字符串会浪费大量空间,而打包成二进制格式只需要4位数字<32位数字>)

PHP中文网有大量免费的PHP入门教程,欢迎大家学习!

本文转载自:https://www.sychzs.cn/p/942907071a4c

以上就是PHP中pack和unpack函数的使用详细讲解。更多相关内容请关注其他相关文章!

相关文章