php手册说hex2bin()返回一个带二进制表示的字符串。
我有这段代码:
$hex = hex2bin("6578616d706c65206865782064617461");
var_dump($hex);
输出结果为:
string 'example hex data' (length=16)
请原谅我,如果我错了,但我相信输出不是二进制字符串? 手册是否出错,或者我遗漏了什么?
------------- ------------编辑
'example hex data'
是数据的二进制表示吗?
答案 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码/表示形式)
hex2bin
和base_convert()
的结果之间似乎产生了混淆。
例如:
磁盘上的某些数据可以显示为(在控制台上)“ A”。
bin2hex
会将其(编码后)返回为“ 41”(十六进制表示形式)。
base_convert()
会将此(相同)数据返回为'01000001'
hex2bin
然后将这个'41'解码到机器(ASCII) 等价的代码“ A”(二进制表示形式,可以作为二进制数据写入磁盘)