如何使用 Perl 和 Google::ProtocolBuffers 模块获取十六进制格式的数据

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

需要读取十六进制格式的数据

#!/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
perl hex decode protoc
1个回答
0
投票

你的问题非常不清楚,但我认为你问的是如何以十六进制打印组成 IEEE 双精度浮点数的字节。

(您的问题介绍了 Google::ProtocolBuffers 和文件 I/O 的使用,但似乎与两者都没有任何关系。)

my $n = 123.456;

首先,获取这些字节。

my $packed = pack( "d>", $n );

然后,获取这些字节的十六进制表示。

my $hex = unpack( "H*", $packed );
© www.soinside.com 2019 - 2024. All rights reserved.