为什么 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的格式是这样介绍的:

  1. h : 十六进制字符串,低半字节在前
  2. c : 有符号字符

所以你这样试试:

echo pack("h*", 0x41) . "<br />"  ;

它打印字符 V。

当你这样尝试时:

echo pack("c*", 0x41) . "<br />"  ;

打印字符A。