将整数转换为8字节长

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

我正在努力生成一些序列号,我需要以长格式编码它们,即标准的8字节,因为下游是Java应用程序,生成的数字应该由Java的Long数据类型读取。

我搜索了Stack Overflow,我可以找到其他语言的答案,但不是Perl。

请注意,下面以ASCII格式打印8个字节:

$ perl -le ' BEGIN { printf("%08d\n", 256) } '
00000256
$

但我不希望这样。我希望输出的原始十六进制值为:

\x00 \x00 \x00 \x00 \x00 \x00 \x01 \x00

当被扫描为8字节时,Long应再次变为256。

对于255,它应该是:

\x00 \x00 \x00 \x00 \x00 \x00 \x00 \xFF

怎么可以在Perl中完成?

perl
1个回答
3
投票

pack()是你的朋友。

my $long = pack('Q', $value);

这将在原生的CPU字节序中创建一个64位,8字节,无符号整数,但是如果你想要一个特定的,即非原生的endian格式,在>之后添加Q将强制big-endian和<将强制little-endian

请注意,这仅适用于64位处理器。

根据您的问题,您需要大端格式

my $long = pack('Q>', $value);

这会将256转换为"\x0\x0\x0\x0\x0\x0\x1\x0"

有关此有用功能的更多信息,请参阅perldoc pack

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