gpt4 book ai didi

perl - 从十六进制字符串中恢复包值

转载 作者:行者123 更新时间:2023-12-05 02:25:27 25 4
gpt4 key购买 nike

如果我用例如产生的十六进制值

my $hex = sprintf "%v02X", $packed_output

$packed_outputpack 对一系列数字的结果,即

my $packed_output = pack "L>*", map { $_->[0] << 16 | $_->[1] } @array;

有没有办法从 $ hex 字符串中取回 $packed_output

最佳答案

一种方法:按句点拆分字符串,并使用 hex 将所有十六进制字符串字节转换回数字,然后再次将它们全部打包:

#!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;


my $packed_output = pack "L>*", 1, 2, 3, 4, 5, 6;
my $hex = sprintf "%v02X", $packed_output;
# $hex is
# 00.00.00.01.00.00.00.02.00.00.00.03.00.00.00.04.00.00.00.05.00.00.00.06

my $binary = pack "(h2)*", map(hex, split(/\./, $hex));

$Data::Dumper::Useqq = 1;
print Dumper($packed_output, $binary);
# Outputs
# $VAR1 = "\0\0\0\1\0\0\0\2\0\0\0\3\0\0\0\4\0\0\0\5\0\0\0\6";
# $VAR2 = "\0\0\0\1\0\0\0\2\0\0\0\3\0\0\0\4\0\0\0\5\0\0\0\6";

虽然听起来您真正想要的是一种在二进制数据和文本数据之间进行往返转换的简单方法。使用 sprintf 来生成像上面那样的十六进制向量字符串是不是。

Perl 支持行业标准 Base64 encoding , 和旧的 uuencode (它是通过 packunpack 内置的,而不是核心模块)。示例:

#!/usr/bin/env perl
use strict;
use warnings;
use MIME::Base64;
use feature qw/say/;

my $packed_output = pack "L>*", 1, 2, 3, 4, 5, 6;

# Base64
my $base64 = encode_base64($packed_output, "");
print $base64; # AAAAAQAAAAIAAAADAAAABAAAAAUAAAAG
my $decoded_b64 = decode_base64($base64);
say "It's a match!" if $packed_output eq $decoded_b64;

# uuencode
my $uuencoded = pack "u", $packed_output;
print $uuencoded; # 8`````0````(````#````!`````4````&
my ($decoded_uu) = unpack "u", $uuencoded;
say "Another match!" if $packed_output eq $decoded_uu;

关于perl - 从十六进制字符串中恢复包值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74580910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com