2015-09-02 306 views
1

我想將位於$ 1,$ 2,$ 3和$ 4中的十六進制值轉換爲二進制文件並保存到數組中。我知道$ 1只是一個字符串,所以我想將它轉換轉換爲二進制之前詛咒,但它不工作...這裏是我的代碼:在Perl中將十六進制轉換爲二進制文件

#! 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 

而且我得到一個錯誤,在某些行說..

爭論 「f8891」 是不是在printf的數字在script.plx線21,<>行6.

回答

1

問題是文本字符串和數字值之間存在差異。

後者可以表示爲十六進制,二進制,八進制 - 幕後,計算機無論如何都是用二進制來思考的。

但是,文本字符串是表示來自字符集的符號的字符代碼序列。

所以要做你想做的事 - 你需要首先將你的'字符串'轉換爲數字值。

的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); 
相關問題