我在Perl中有一个十六进制值作为ASCII字符串:
42dc3f74212c4e74bab2
< - 这是一个字符串,但这也是我需要的实际十六进制值
我需要将其转换为十六进制,转换我的意思是\ x42 \ xdc \ x3f等。
$auth_key = pack("h*", $key);
#它有点工作,但它给我一个低蚕,所以我最终得到24 cd f3
等。
如何将此字符串转换为相同值的十六进制数!
如果有帮助的话,我试图将其输入UDP套接字。
答案 0 :(得分:3)
使用pack 'H*', $key
。
来自perldoc -fpack
:
h A hex string (low nybble first).
H A hex string (high nybble first).
以下是shell的一些输出:
$perl -E'print pack "H*","42dc3f74212c4e74bab2"' | hd
00000000 42 dc 3f 74 21 2c 4e 74 ba b2 |B.?t!,Nt..|
0000000a
答案 1 :(得分:1)
另一种方式:
use strict;
use warnings;
use 5.016;
my $str = "42dc3f74212c4e74bab2";
$str =~ s/(..)/chr(hex($1))/eg; #hex() -> convert hex string to decimal number, chr() -> convert decimal number to a character(string).
say $str;
say (pack "H*","42dc3f74212c4e74bab2");
--output:--
B??t!,Nt??
B??t!,Nt??
使用hexdump往返:
$ perl -E'print "42dc3f74212c4e74bab2" =~ s/(..)/chr(hex($1))/erg' | hexdump -C
00000000 42 dc 3f 74 21 2c 4e 74 ba b2 |B.?t!,Nt..|
0000000a
pack()/ unpack()非常有效,所以应该首选它们。