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