-1
我有以下一段代碼,它將1個字符一次轉換爲一個十六進制。我想將兩個字符轉換爲十六進制。即99ab應該被視爲'99','ab'被轉換爲相應的十六進制。一次將兩個字符從一個字符串轉換爲十六進制
當前實現如下
$final =~ s/(.)/sprintf("0x%X ",ord($1))/eg;
chop($final);
TIA
我有以下一段代碼,它將1個字符一次轉換爲一個十六進制。我想將兩個字符轉換爲十六進制。即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;
或
$final = pack 'H*', $final;
我能想到的另一種可能的選擇是,要解壓縮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;
你的問題不明確。如果以'$ final =「99ab」開頭,'$ final'應該包含什麼內容?''? – ikegami 2013-05-07 02:21:54
@ikegami:我認爲他想在兩個字節段對待他們 – 2013-05-07 02:25:50
是不是99ab已經十六進制? – xaxxon 2013-05-07 02:37:18