PHP函数hex2bin()不返回二进制字符串

时间:2015-04-15 08:26:32

标签: php

php手册说hex2bin()返回一个带二进制表示的字符串。

我有这段代码:

$hex = hex2bin("6578616d706c65206865782064617461");
var_dump($hex);

输出结果为:

string 'example hex data' (length=16)

请原谅我,如果我错了,但我相信输出不是二进制字符串? 手册是否出错,或者我遗漏了什么?

------------- ------------编辑

'example hex data'是数据的二进制表示吗?

2 个答案:

答案 0 :(得分:1)

hex2bin将十六进制数转换为原始字节。输出到屏幕的这些原始字节将由您的浏览器和/或CLI解释,这将把它变成文本。 bin2hex 会返回类似" 01001000101"的字符串如果这是你的期望;它是二进制字符串的 ASCII表示,而不是二进制字符串。如果您想要的话,请参阅此示例:How to see binary representation of variable

答案 1 :(得分:0)

来自php manual
“此函数不会将十六进制数转换为二进制数。可以使用base_convert()函数来完成。”

“解码十六进制编码的(二进制)字符串”和“返回给定数据的二进制表示形式” (机器代码,即写入磁盘或由计算机硬件处理的内容)

回答您的问题:

'example hex data' (给定文本)数据的(解码)二进制表示形式。
相同数据的十六进制(编码)表示为6578616d706c65206865782064617461。 要显示与上面的十六进制(基数16)数字等效的二进制(基数2),请base_convert()(得到0和1的字符串; ASCII码/表示形式)

hex2binbase_convert()的结果之间似乎产生了混淆。

例如:

磁盘上的某些数据可以显示为(在控制台上)“ A”。
bin2hex 会将其(编码后)返回为“ 41”(十六进制表示形式)。
base_convert()会将此(相同)数据返回为'01000001'
hex2bin然后将这个'41'解码到机器(ASCII) 等价的代码“ A”(二进制表示形式,可以作为二进制数据写入磁盘)