gpt4 book ai didi

perl - 如何在 Perl 中对整数进行符号扩展?

转载 作者:行者123 更新时间:2023-12-03 01:48:18 35 4
gpt4 key购买 nike

在我的代码中,我从 16 位值数组中读取数据,其中一些数据实际上包含带符号的 32 位变量(来自大端系统)。所以我会做类似的事情:

$value = $data[$i] << 16 | $data[$i+1];

这在 32 位系统上运行良好,但在 64 位系统上运行时,这将被解释为正数(二进制补码为 32 位数字)。当然,我可以手动检查是否设置了最高位,然后进行减法,但它有点笨拙,特别是因为我希望代码可以在 32 位和 64 位系统上运行。有没有简单又好的方法来做到这一点?

最佳答案

我会使用 packunpack 来实现此目的:

my @data = (0x12, 0x3456);
my $i = 0;
my $value = unpack('l>', pack('n2', @data[$i, $i+1]));

这样做的优点是您可以一次处理整个数组:

my @values = unpack('l>*', pack('n*', @data));

关于perl - 如何在 Perl 中对整数进行符号扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6354407/

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