将整数转换为8字节长

时间:2019-03-20 12:55:57

标签: perl

我正在努力生成一些序列号,我需要将它们编码为长格式,即标准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中怎么做?

1 个答案:

答案 0 :(得分:3)

pack()是你的朋友。

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

这将以本机CPU字节序创建一个64位,8字节,无符号整数,但是,如果您要使用特殊的(即非本机字节序)格式,请在>之后添加Q会强制使用- endian和<将强制使用little-endian

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

从您的问题开始,您需要大尾数格式,因此您需要

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

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

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

相关问题