请问如何转换成这种形式的数据?

php中文网
发布: 2016-06-23 14:22:45
原创
1024人浏览过

这好像是二进制。php用什么函数把字符串或者数组转换成这样?


回复讨论(解决方案)

pack()
反向是unpack()


pack()
反向是unpack()

隐约好像是pack,但这个函数有很多参数,我试过了,运行结果都显示不出类似的数据结构。

如果只用 pack 就能成,那就怪了

补充楼上的话问LZ
你不会是直接看pack()的结果吧?
pack()后的结果是字节,必须用wb方式写入文件,用支持hex的编辑器打开才能看得
而且不同的参数转换不同的字串(这个字串还要按字节考虑),慢慢研究那些参数的意思吧

补充楼上的话问LZ
你不会是直接看pack()的结果吧?
pack()后的结果是字节,必须用wb方式写入文件,用支持hex的编辑器打开才能看得
而且不同的参数转换不同的字串(这个字串还要按字节考虑),慢慢研究那些参数的意思吧

如果是字符串转成二进制。参数用a对吗?还是大写的A?

字符串就是二进制的
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 

字符串就是二进制的
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
$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参数输出
换言之,格式参数中*号就能用于后面不定长的输入了

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号