say pack "A*", "asdf"; # Prints "asdf"
say pack "s", 0x41 * 256 + 0x42; # Prints "BA" (0x41 = 'A', 0x42 = 'B')
第一行是有道理的:你正在获取一个 ASCII 编码的字符串,将它作为一个 ASCII 字符串打包成一个字符串。在第二行中,由于我的机器上短整数的小字节序,打包形式是“\x42\x41”。
但是,我无法摆脱这样一种感觉,即我应该能够将第二行中的打包字符串视为一个数字,因为(我假设)Perl 就是这样存储数字的,作为小端字节序。有没有办法在不打开包装的情况下这样做?我试图为 pack() 返回的东西获得正确的心理模型。
例如,在 C 中,我可以这样做:
#include <stdio.h>
int main(void) {
char c[2];
short * x = c;
c[0] = 0x42;
c[1] = 0x41;
printf("%d\n", *x); // Prints 16706 == 0x41 * 256 + 0x42
return 0;
}