为什么 PHP pack("h*", 0x41) 函数打印错误的 ASCII 文本
Why PHP pack("h*", 0x41) function prints wrong ASCII text
我阅读了 here 如何使用 PHP 中的 pack
函数。
根据文档,h
格式将打印
Hex string, low nibble first
我想检查它是如何工作的,所以我 运行 下面的命令:
echo pack("h*", 0x41) . "<br />" ;
您可以在 this 在线 PHP 命令网站上试用。
打印字符V
。
但是 0x41
是十进制的 65
,二进制的 01000001
和 ASCII/ANSI 的 A
。
为什么打印 V
而不是 A
?
我知道它以二进制结构打包,但二进制结构是 01000001
应该是 A
.
没错,使用 h
的正确格式,low 先蚕食,所以:
echo pack("h*", "14");
输出:
A
H
的相同输出,high 首先半字节:
echo pack("H*", "41");
为了更直观,最好使用H
。
我觉得你用错格式了,pack的格式是这样介绍的:
- h : 十六进制字符串,低半字节在前
- c : 有符号字符
所以你这样试试:
echo pack("h*", 0x41) . "<br />" ;
它打印字符 V。
当你这样尝试时:
echo pack("c*", 0x41) . "<br />" ;
打印字符A。
我阅读了 here 如何使用 PHP 中的 pack
函数。
根据文档,h
格式将打印
Hex string, low nibble first
我想检查它是如何工作的,所以我 运行 下面的命令:
echo pack("h*", 0x41) . "<br />" ;
您可以在 this 在线 PHP 命令网站上试用。
打印字符V
。
但是 0x41
是十进制的 65
,二进制的 01000001
和 ASCII/ANSI 的 A
。
为什么打印 V
而不是 A
?
我知道它以二进制结构打包,但二进制结构是 01000001
应该是 A
.
没错,使用 h
的正确格式,low 先蚕食,所以:
echo pack("h*", "14");
输出:
A
H
的相同输出,high 首先半字节:
echo pack("H*", "41");
为了更直观,最好使用H
。
我觉得你用错格式了,pack的格式是这样介绍的:
- h : 十六进制字符串,低半字节在前
- c : 有符号字符
所以你这样试试:
echo pack("h*", 0x41) . "<br />" ;
它打印字符 V。
当你这样尝试时:
echo pack("c*", 0x41) . "<br />" ;
打印字符A。