如何让一段数据转为hex形式

php中文网
发布: 2016-06-23 13:52:56
原创
1306人浏览过

是酱紫的,上图

这是一个blob里的数据,我现在用stream_get_contents把他取出来之后直接变成图中右侧ascii形式了,但是协议里不是按ascii搞的。请问怎么取或者怎么能转换成一段hex形式的字符串?


回复讨论(解决方案)

先把一个事情弄清楚
图中右侧的 ASCII 形式和中部的 HEX 形式都是同一个东西(我们称作二进制串)
这两种表示方式都不用于实际的数据通讯中,通讯时依然使用的是二进制串

$s = 'ABCDEFGHIJKLMNOP';echo strtoupper(join(' ', str_split(bin2hex($s), 4)));
登录后复制
登录后复制
登录后复制
4142 4344 4546 4748 494A 4B4C 4D4E 4F50

我感觉是取值用的函数不对,但是经验又太少。用什么能把原数据原封不动的搞成字符串呢

先把一个事情弄清楚
图中右侧的 ASCII 形式和中部的 HEX 形式都是同一个东西(我们称作二进制串)
这两种表示方式都不用于实际的数据通讯中,通讯时依然使用的是二进制串

$s = 'ABCDEFGHIJKLMNOP';echo strtoupper(join(' ', str_split(bin2hex($s), 4)));
登录后复制
登录后复制
登录后复制
4142 4344 4546 4748 494A 4B4C 4D4E 4F50


斑竹大大可来了~~~我现在是这样理解的,我们协议里是按照hex一段一段来解数据嘛,比如第二行DD07,转为十进制后是221和7,之后通过协议规定221+7*256=2013。但是现在我把这段字符取出来直接变成ascii形式了,协议就不灵了,我的问题就在于此,怎么让我取出来的还是hex形式?

先把一个事情弄清楚
图中右侧的 ASCII 形式和中部的 HEX 形式都是同一个东西(我们称作二进制串)
这两种表示方式都不用于实际的数据通讯中,通讯时依然使用的是二进制串

$s = 'ABCDEFGHIJKLMNOP';echo strtoupper(join(' ', str_split(bin2hex($s), 4)));
登录后复制
登录后复制
登录后复制
4142 4344 4546 4748 494A 4B4C 4D4E 4F50

谢谢斑竹 已经解决了 我真2

十六进制(HEX)表示 只是为了描述上的直观

如果一个字符串的十六进制表示是 DD07
那么在 php 中就可写作 
$s = chr(0xdd) . chr(0x07);
echo ord($s{0}; //221
echo ord($s{1}; //7

最佳 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号