php pack 函数

 php -r 'echo pack("H6", "E59B9E");'

注意H* 和 H6 类似表示 后面的arg 可以任意长

后面每个字符 作为十六进制的4位数字

如果是0xE5B9E 则 转换成字符串(十六进制转换字符串 源码中的convert_to_string_ex 是先转换成十进制 1233 即字符串形式) 

H 表示 一次读取四位 不足8 需要补4位  (先转换成字符串)



整型相关pack

先转换成long 然后根据short int 或者long 分别取4个字节数字 组合成二进制流


@4 表示 当前位置到位置4 都变成 \0 (要求@后面指定的位置必须大于当前位置) 


X 表示当前输出结果位置倒退一个格式(如果H6 在倒退6个字节)指定的字节。


x当前位置填充 NULL

echo pack("H2", "41") 输出 'A'

echo pack("H2", "40");  输出 '@'

echo pack("H", "4"); 输出 '@'  说明不足8位的 以0填充



echo bin2hex(pack("c", 'a')); 输出 00

echo bin2hex(pack("c", '65')) 输出41

echo bin2hex(pack("S", '6511')); 输出 6f19

echo bin2hex(pack("S", 6511));  输出 6f19    注意6511转换16进制是 196f 

以上说明 pack c pack S都是将后面的 参数先intval 转换成整数 再 解析读取



echo bin2hex(pack("c", 1230));

输出 ce 十进制206 二进制 11001110

1230 转换二进制 10011001110  

说明 pack('c" ,arg) 是将arg转换十进制 读取低8位 形成

echo bin2hex(pack("C", 129)); 81

echo bin2hex(pack("S", 129));8100 小端字节序

echo bin2hex(pack("s", 129)); 8100  小端字节序

说明 pack("S", arg) 是将arg转换成是二进制 数字后,读取低16位 不足补零


c C区别暂时未深入研究 好像木有区别 都是8位



$binarydata "\x04\x00\xa0\x00";
$array unpack("cchars/nint"$binarydata);
print_r($array);

Array
(
    [chars] => 4
    [int] => 160
)
注意这里的 十六进制字符串 直接转换为数字

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值