gpt4 book ai didi

perl - 在 Perl 中将十六进制转换为二进制

转载 作者:行者123 更新时间:2023-12-03 09:20:36 28 4
gpt4 key购买 nike

我想将 $1、$2、$3 和 $4 中的十六进制值转换为二进制并保存在数组中。我知道 $1 只是一个字符串,所以我尝试在转换为二进制之前将其转换为十六进制,但它不起作用......这是我的代码:

#! usr/bin/perl
use warnings;
use strict;

while(<>)
{
if(/SIB_DBG/)
{
if(/TTRB:\s*([\da-f]+)\s([\da-f]+)\s([\da-f]+)\s([\da-f]+)/ ||
/ETRB:\s*([\da-f]+)\s([\da-f]+)\s([\da-f]+)\s([\da-f]+)/ ||
/Command\sETRB\s*([\da-f]+)\s([\da-f]+)\s([\da-f]+)\s([\da-f]+)/ )
{
my $one = $1;
my $two = $2;
my $three = $3;
my $four = $4;
print "$_ $one $two $three $four\n";
printf("binary :%b\n",$four);
}
}
}

我的输入日志文件就像

Aug 31 15:25:53 usb3 kernel: [   78.812034] SIB_DBG TTRB:01000680 00080000 00000008 00030840, PTR: ffff88005ff8b800
Aug 31 15:25:53 usb3 kernel: [ 78.815428] SIB_DBG ETRB: 5ff8b850 00000000 01000000 01018001

此外,我在某些行中收到错误消息..

Argument "f8891" isn't numeric in printf at script.plx line 21, <> line 6.

最佳答案

问题是文本字符串和数值之间存在差异。

后者可以表示为十六进制、二进制、八进制——在幕后,计算机无论如何都以二进制来思考。

文本字符串是一个字符代码序列,代表字符集中的符号。

因此,要做你想做的事 - 你需要首先将“字符串”转换为数值。

Perl 有 hex 函数可以为您执行此操作:

#!/usr/bin/env perl
use strict;
use warnings;

my $string = '5ff8b850';
my $value = hex ( $string );

print "Dec: ",$value,"\n";
printf ( "Hex: %X\n", $value );
printf ( "Binary: %b\n", $value );

关于perl - 在 Perl 中将十六进制转换为二进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32349086/

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