在Perl中解码4个无符号字符中的32位无符号整数

Decoding 32bit unsigned int in 4 unsigned char in Perl

我必须在二进制文件中写入这些十六进制值:

my $erase_start = 0x00010000;
my $erase_size  = 0x00008000;

这是预期的结果

正在使用

print WRITEHANDLE sprintf('%08X', $erase_start);
print WRITEHANDLE sprintf('%08X', $erase_size);

我得到

我正在查看 pack/unpack 功能,但我不是 Perl 大师。

您想将这些 32 位无符号整数写入二进制文件。所以我猜你想要这样的东西:

open my $fh, ">", "file.dta" or die;
binmode($fh);
print $fh pack("N*", 0x00010000, 0x00008000);   #one or more u32 values
close($fh);

sprintf %X 生成十六进制,它是数字的 text 表示。这不是你想要的。

您想将数字输出为大端 32 位整数。为此,您可以使用

pack('N*', $erase_start, $erase_size)

pack('L>*', $erase_start, $erase_size)

您可能对 Formats for Packing and Unpacking Numbers 感兴趣。