为什么PHP pack(“h *”,0x41)函数打印错误的ASCII文本

问题描述 投票:1回答:2

我读了here如何在PHP中使用pack函数。

根据文档,将打印h格式

十六进制字符串,首先是低半字节

我想检查它是如何工作的,所以我运行了以下命令:

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

你可以在this在线PHP命令网站上试试。

它打印字符V。 但0x41是十进制的65,二进制的01000001和ASCII / ANSI的A。 为什么它打印V而不是A? 我知道它包装在二进制结构中,但二进制结构是01000001,应该是A

php hex pack
2个回答
1
投票

确切地说,使用正确的h格式,首先是低位半字节,所以:

echo pack("h*", "14");

输出:

A

H的相同输出首先是高半字节:

echo pack("H*", "41");

最好使用H来获得更直观的效果。


1
投票

我认为你使用了错误的格式,包的格式如下所示:

  1. h:十六进制字符串,首先是低半字节
  2. c:签名的char

所以你试试这样:

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

它打印角色V.

当你这样尝试时:

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

它打印角色A.

© www.soinside.com 2019 - 2024. All rights reserved.