需要读取十六进制格式的数据
#!/usr/bin/perl -w
use Google::ProtocolBuffers;
use File::Slurp qw(read_file write_file);
Google::ProtocolBuffers->parse("
message TestMessage {
required double tag1 = 1;
}
",
{create_accessors => 1 }
);
my $enc = TestMessage->encode({
tag1 => 0,
});
open my($fh), ">data.bin";
binmode $fh;
print $fh $enc;
close $fh;
my $dec = read_file('data.bin', { binmode => ':raw' });
my $protoc = TestMessage->decode($dec);
print $protoc->tag1;
我用这个模块尝试过,它可以将任何数字读取为 float64。 当我尝试使用 protoc 命令时,一切都按预期进行。
C:\Users\user\Desktop>protoc --decode_raw < data.bin
1: 0x0000000000000000
你的问题非常不清楚,但我认为你问的是如何以十六进制打印组成 IEEE 双精度浮点数的字节。
(您的问题介绍了 Google::ProtocolBuffers 和文件 I/O 的使用,但似乎与两者都没有任何关系。)
my $n = 123.456;
首先,获取这些字节。
my $packed = pack( "d>", $n );
然后,获取这些字节的十六进制表示。
my $hex = unpack( "H*", $packed );