字符串就是二进制的 a 表示在指定的长度中,不足的部分用 null (0x00) 充填 A 表示在指定的长度中,不足的部分用 空格 (0x20) 充填 如果没有指定长度,也就没有什么意义了 $s = 'CSDN(www.csdn.net)'; for($i=0; $i<strlen($s); $i++) { printf('%02x ', ord($s{$i})); if(($i+1)%16 == 0) echo '<br>'; }43 53 44 4e 28 77 77 77 2e 63 73 64 6e 2e 6e 65 74 29
老徐所写的定长指的是格式参数所需要的长度,而不是字符串(输入)的长度 例如手册的例子 Example #1 pack() example <?php $binarydata = pack("nvc*", 0x1234, 0x5678, 65, 66); ?> The resulting binary string will be 6 bytes long and contain the byte sequence 0x12, 0x34, 0x78, 0x56, 0x41, 0x42. 因为参数n和v是16位,而c则是8位,所以后面几个参数0x1234按n参数,0x5678按v参数,65按c参数,*号表示后续继续按c参数,所以66也按c参数输出 换言之,格式参数中*号就能用于后面不定长的输入了
你不会是直接看pack()的结果吧?
pack()后的结果是字节,必须用wb方式写入文件,用支持hex的编辑器打开才能看得
而且不同的参数转换不同的字串(这个字串还要按字节考虑),慢慢研究那些参数的意思吧
a 表示在指定的长度中,不足的部分用 null (0x00) 充填
A 表示在指定的长度中,不足的部分用 空格 (0x20) 充填
如果没有指定长度,也就没有什么意义了
$s = 'CSDN(www.csdn.net)';
for($i=0; $i<strlen($s); $i++) {
printf('%02x ', ord($s{$i}));
if(($i+1)%16 == 0) echo '<br>';
}43 53 44 4e 28 77 77 77 2e 63 73 64 6e 2e 6e 65
74 29
例如手册的例子
Example #1 pack() example
<?php
$binarydata = pack("nvc*", 0x1234, 0x5678, 65, 66);
?>
The resulting binary string will be 6 bytes long and contain the byte sequence 0x12, 0x34, 0x78, 0x56, 0x41, 0x42.
因为参数n和v是16位,而c则是8位,所以后面几个参数0x1234按n参数,0x5678按v参数,65按c参数,*号表示后续继续按c参数,所以66也按c参数输出
换言之,格式参数中*号就能用于后面不定长的输入了