簡體   English   中英

使用Perl將ASCII十六進制字符串轉換為相同的十六進制值

[英]Convert a hex string in ASCII to the same hex values using Perl

我在Perl中有一個十六進制值作為ASCII字符串:

42dc3f74212c4e74bab2 <-這是一個字符串,但這也是我需要的實際十六進制值

我需要將其轉換為十六進制,通過轉換我的意思是\\ x42 \\ xdc \\ x3f等。

$auth_key = pack("h*", $key); #這很有效,但它給我帶來的好處不多,所以我最終得到了24 cd f3等。

如何將這個字符串轉換為相同值的十六進制!

如果有幫助,我正在嘗試將其輸入UDP套接字。

使用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

其他方式:

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??

十六進制轉儲往返:

$ 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()效率很高,因此應該首選。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM