Google搜查列

 

2008年4月24日 星期四

把十六進位轉十進位

最近在找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";

沒有留言:

Google Analytics