簡體   English   中英

Perl:創建二進制數並將其轉換為十六進制

[英]Perl: Create a binary number and convert it into hex

我想從給定的用戶輸入創建二進制數。

輸入 - 數字數組

輸出 - 二進制數

應該創建一個二進制數,使其在所有已作為輸入給出的位置上有一個。

在給定的情況下,輸入是1,3和7,所以我的二進制no應該是1000101 ,所以它在左邊的1,3和7位有1。

@x = [ 1, 3, 7 ];
$z = 0;
for( $i = 0; $i < 10; $i++ ){
    foreach $elem ( @x ){
        if( $elem == $i ){
            join( "", $z, 1 );
        }
        else{
            join( "", $z, 0 );
       }
   }
}
print "Value of z: $z";

執行后,我將z的值設為0。

我需要將此二進制文件轉換為十六進制。

是否有一些函數將二進制轉換為十六進制?

[ ]創建一個數組並返回對該數組的引用,因此您將單個標量賦給(名稱不佳) @x

你也在濫用join 始終use strict; use warnings qw( all ); use strict; use warnings qw( all ); 它會抓住這個錯誤。

固定:

my @bits = ( 1, 3, 7 );

my $num = 0;
$num |= 1 << $_ for @bits;
                                           #   76543210
printf("0b%b\n", $num);                    # 0b10001010
printf("0x%X\n", $num);                    # 0x8A

看來你想要0b1000101 ,所以我們需要糾正索引。

my @bits_plus_1 = ( 1, 3, 7 );

my $num = 0;
$num |= 1 << ( $_ - 1 ) for @bits_plus_1;
                                           #   6543210
printf("0b%b\n", $num);                    # 0b1000101
printf("0x%X\n", $num);                    # 0x45

一些問題:

  • @x = [ 1, 3, 7 ]; 不是三個整數的數組。 它是一個包含單個數組引用的數組。 你想要的是圓括號,而不是方括號: @x = ( 1, 3, 7 );

  • join返回的字符串未分配給$z


但即便如此,你的代碼仍然是錯誤的:

  • 它在$z末尾附加了一點,而不是開頭

  • 有一個尾隨零,沒有業務存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM