如代碼所示。我已將一個十六進制數轉換為二進制,將其添加到陣列中并重新洗牌。
我想將它轉換回十六進制并停留在將陣列轉換為變數然后轉換為六進制的步驟。我已經使用了我評論過的幾個步驟,但它們沒有用。有沒有辦法將陣列轉換為變數,然后轉換為我的情況下的十六進制
#!/usr/bin/env perl
use warnings;
import math
my $value = hex ( 'FE300B0' );
print "Dec: ",$value,"\n";
printf ( "Hex: %X\n", $value );
my $binval = sprintf ( "%0*b\n",32, $value );
print $binval;
my @binval_arr = split('', $binval, 32);
#print "Size: ",scalar @binval_arr,"\n";
#print "\$binval_arr[27] = $binval_arr[27]\n";
print @binval_arr;
#my @mod_bin = @binval_arr;
#my @mod_bin;
my @mod_bin = (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
#modifeid 20..31
@mod_bin[20..31] = @binval_arr[20..31];
@mod_bin[9] = $binval_arr[10];
@mod_bin[18,19] = @binval_arr[14,15];
@mod_bin[10..17] = @binval_arr[2..9];
#print join("\n",@binval_arr),"\n";
print @mod_bin,"\n";
#my $mod_str = join('', @mod_bin);
#print $mod_str,"\n";
my $mod_int = int(@mod_bin);
my $mod_int = \@mod_bin;
print $mod_int,"\n";
output ::
Dec: 266535088
Hex: FE300B0
00001111111000110000000010110000
00001111111000110000000010110000
00000000010011111111000010110000
ARRAY(0x5635e48dcca8)
uj5u.com熱心網友回復:
您根本不應該轉換為二進制檔案。您應該使用位算術運算子。
my $value = hex( 'FE300B0' );
my $modified =
( ( $value >> 2 ) & 0x0FFF ) << 2
| ( ( $value >> 21 ) & 0x0001 ) << 22
| ( ( $value >> 16 ) & 0x0003 ) << 12
| ( ( $value >> 22 ) & 0x00FF ) << 14;
請注意,這會分配給第 13 位($mod_bin[18]在原始檔案中)兩次,就像您的代碼一樣。這肯定是一個錯誤?
uj5u.com熱心網友回復:
進行二進制到十六進制操作的一種方法是:
$hex = sprintf "%x", oct("0b$binary");
要將“0”和“1”元素的陣列轉換為“0”和“1”字符的 32 字符標量,請使用
$binary = join("", @mod_bin);
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/464296.html
標籤:perl
