Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 一次将两个字符从字符串转换为十六进制_String_Perl_Hex - Fatal编程技术网

String 一次将两个字符从字符串转换为十六进制

String 一次将两个字符从字符串转换为十六进制,string,perl,hex,String,Perl,Hex,我有下面一段代码,它一次将1个字符转换为十六进制。我想把两个字符转换成十六进制。ie 99ab应被视为“99”,“ab”以转换为其等效十六进制 目前的执行情况如下 $final =~ s/(.)/sprintf("0x%X ",ord($1))/eg; chop($final); TIA你的问题没有多大意义。十六进制是数字的字符串表示形式。不能将字符串转换为十六进制 您可以将字符串中的单个字符转换为十六进制,因为字符仅仅是数字,但这显然不是您想要的。(您的代码就是这样做的。) 我想你是在尝试

我有下面一段代码,它一次将1个字符转换为十六进制。我想把两个字符转换成十六进制。ie 99ab应被视为“99”,“ab”以转换为其等效十六进制

目前的执行情况如下

$final =~ s/(.)/sprintf("0x%X ",ord($1))/eg;
chop($final);

TIA你的问题没有多大意义。十六进制是数字的字符串表示形式。不能将字符串转换为十六进制

您可以将字符串中的单个字符转换为十六进制,因为字符仅仅是数字,但这显然不是您想要的。(您的代码就是这样做的。)


我想你是在尝试从十六进制转换成字符

6 chars "6a6b0a" ⇒ 3 chars "\x6a\x6b\x0a"
如果是这样,您可以选择

$final =~ s/(..)/ chr(hex($1)) /seg;


我能想到的另一种可能性是你想要解压16位整数

6 chars "6a6b" ⇒ 13 chars "0x6136 0x6236"   (LE byte order)
   -or-
6 chars "6a6b" ⇒ 13 chars "0x3661 0x3662"   (BE byte order)
如果是这样,你可以使用

my @nums = unpack 'S<*', $packed;  # For 16-bit ints, LE byte order
   -or-
my @nums = unpack 'S>*', $packed;  # For 16-bit ints, BE byte order

my $final = join ' ', map sprintf('0x%04X', $_), @nums;
my@nums=unpack'S*,$packed;#对于16位整数,为字节顺序
my$final=join'',映射sprintf('0x%04X',$\)@nums;

您的问题不清楚。如果以
$final=“99ab”开头,则
$final
应包含哪些内容?@ikegami:我想他想把它们分成两个字节段。99ab不是已经是十六进制了吗?@xxaxxon:ord将字符转换成ASCII值。@0A0D,是的,他说他想一次取两个。这一部分很清楚。我的问题是确定一旦获得了字符对,应该如何处理它们。(他说他想将这对数字转换为十六进制,这毫无意义。你只能将数字转换为十六进制,而不能将两个字符的字符串。我几乎认为他想从十六进制转换,但他的代码让他试图将某些东西转换为十六进制。)
my @nums = unpack 'S<*', $packed;  # For 16-bit ints, LE byte order
   -or-
my @nums = unpack 'S>*', $packed;  # For 16-bit ints, BE byte order

my $final = join ' ', map sprintf('0x%04X', $_), @nums;