gpt4 book ai didi

perl - Perl 如何在内存中存储整数?

转载 作者:行者123 更新时间:2023-12-04 17:35:52 26 4
gpt4 key购买 nike

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;
}

最佳答案

如果您真的对 Perl 如何在内部存储数据感兴趣,我建议您使用 PerlGuts Illustrated .但通常情况下,您不必关心此类事情,因为 Perl 不允许您访问此类低级细节。这些内部结构仅在您用 C 编写 XS 扩展时才重要。

如果要将两字节字符串“强制转换”为 C short ,您可以使用 unpack像这样的功能:

$ perl -le 'print unpack("s", "BA")'
16706

关于perl - Perl 如何在内存中存储整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19420031/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com