最近在找PERL有關於進位的轉換,好像比較少
為什麼呢?
因為在PERL的世界裡,不用宣告這個變數是什麼特別格式
一時是整數,有時是字串…
但你要知道如果變數內的2B值如何變成十進位
也就是如果在螢幕上看到的是 A--->ASC II是65(這是十進位表示)---->或是十六進位表示是0x41
這次我是要把AAA當成十六進位的0x00414141轉為十進位的4276545
或許有人會問為什麼要這樣作,因為我目前遇到的問題是封包問題,因封包Packet分析的器Wireshark上某一欄位看到的是1B,我想轉成十進位來看裡面的東西
好比是IP位置,PORT號,轉成十進位比較好看
目的是把ASC II旳值轉成十進位看
#!/usr/bin/perl
use strict;
my $tt;
my $go1=chr(65); #大寫A的十進位為65
my $go2=chr(0x41); #大寫A的十六進位為41
my $go3=chr(0x41);
my $text="$go1$go2$go3"; #合起來當作是十六進位0AAA轉十進位來看
print "$text\n";
my $tot=0;
my $ligh=length($text);
for(my $i=0;$i < $ligh;$i++){
my $SC=substr($text,$i,1);
if(ord($SC)!=0 ){
$tt=int(ord($SC)/16)*(16**(($ligh*2)-($i*2)-1))+int(ord($SC)%16)*(16**(($ligh*2)-($i*2)-2));
#print " $i\t".ord($SC)."\t$SC\t";
print $tt,'+';
}
$tot=$tot+$tt;
}
print ' 轉成10進位後',"\t$tot\n";
沒有留言:
張貼留言