Perl:MSBと残りのビットを16進数から分離します

カムルルカーン

MSBと残りのビットを16進文字列から分離する必要があります。たとえば、次のようにa2なり1010 0010ます。に相当する16進文字列があります。MSB(この場合は1)を分離し、残りの数値を10進数に変換したいと思います。私はこのようなことをすることができると思います:

$hex = 'a2';
$dec = hex($hex);
$bin = sprintf("%b", $dec);
$msb = substr $bin, 0, 1;
$rest = substr $bin 1, 7;

$restDec = oct("0b" . $rest);

ただし、ビット演算に文字列を使用するのは好きではありません。これを行うためのより良い方法はありますか?

ジム・ギャリソン

ビット演算子の使用は簡単です。

$msb  = ($dec & 128) >> 7
$rest = ($dec & 127)

説明:

10進数の128は0x80または0b1000_0000であるため、最上位ビットを除くすべての128マスク(ゼロに設定)でビット単位の「and」演算子を使用すると、LSBにシフトダウンして結果が0または1になります。実際にはディスペンスできます。マスキング操作を使用して右にシフトするだけですが、明示的にマスキングすることには2つの利点があります。

  1. それは意図を明確にし、そして
  2. これを255より大きい数に誤って適用した場合でも機能します。

10進数の127は、0x7Fまたは0b0111_1111ビット単位でこれを「and-ing」し$dec、MSBをゼロに設定し、残りのビットはそのままにします。

追記:Perlには16進数のリテラル(0x...2進数のリテラル(0b...)があるため、上記も記述できます。

$msb  = ($dec & 0x80) >> 7
$rest = ($dec & 0x7F)

あるいは

$msb  = ($dec & 0b10000000) >> 7
$rest = ($dec & 0b01111111)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

16進数の8ビットを2つの4ビットに分離する方法

分類Dev

16進文字列を2進に変換し、ビットn C ++に分離します。

分類Dev

配列値を取得し、残りから分離します

分類Dev

サイズ8と16の2つのビットマップを単一のPNGから分離する方法

分類Dev

Perl:10進数から32ビットへの16進数変換

分類Dev

16進値からビットをマージします

分類Dev

bashに2つの256ビット16進数を追加しますか?

分類Dev

ビットコイン sha256 から 16 進数への変換は、予想とは異なる結果を生成します。

分類Dev

複数の16進数からビットをカウントする方法

分類Dev

文字列の最後のブロックをExcelの残りのエントリから分離する

分類Dev

MSBの位置Pから開始して、数値NにXビットを効果的に設定します。

分類Dev

Android Javaは16進値からビットマップを作成します

分類Dev

構造体ビットフィールドから16進数で完全なuint32_tを出力します

分類Dev

Javascriptで64ビットの16進数から10進数

分類Dev

2進数から偶数位置のビットを反転します

分類Dev

Excel:通貨値を残りの行から分離する

分類Dev

固有のエラーを残りから分離する

分類Dev

boost :: property_treeを使用してXMLからの10進数とともに16進数を解析します

分類Dev

Javaで8ビットを維持する16進数から2進数への変換

分類Dev

16ビットレジスタのMSBから値を取得する

分類Dev

符号付き64ビット整数を16進数と8進数で出力します

分類Dev

バッファからn番目のビットを削除し、残りをシフトします

分類Dev

16進数の文字列をビット文字列に変換します

分類Dev

16進数を2進数から16進数に変換しますか?

分類Dev

このtxnが残高を転送しなかったのはなぜですか、問題の応答セットとまったく同じ文字列と同じ16進数を渡しました

分類Dev

smaliの編集。問題:下位16ビットをゼロにする必要があります。16進数のIDが間違っていますか?

分類Dev

golangはnet.TCPConnからバイトを読み取り、メッセージの分離として4バイトを使用します

分類Dev

C ++ std :: hexはバイトの順序を逆にしますか?(10進数を16進数として出力)

分類Dev

10進クラスが残りの26ビットを使用しないのはなぜですか?

Related 関連記事

  1. 1

    16進数の8ビットを2つの4ビットに分離する方法

  2. 2

    16進文字列を2進に変換し、ビットn C ++に分離します。

  3. 3

    配列値を取得し、残りから分離します

  4. 4

    サイズ8と16の2つのビットマップを単一のPNGから分離する方法

  5. 5

    Perl:10進数から32ビットへの16進数変換

  6. 6

    16進値からビットをマージします

  7. 7

    bashに2つの256ビット16進数を追加しますか?

  8. 8

    ビットコイン sha256 から 16 進数への変換は、予想とは異なる結果を生成します。

  9. 9

    複数の16進数からビットをカウントする方法

  10. 10

    文字列の最後のブロックをExcelの残りのエントリから分離する

  11. 11

    MSBの位置Pから開始して、数値NにXビットを効果的に設定します。

  12. 12

    Android Javaは16進値からビットマップを作成します

  13. 13

    構造体ビットフィールドから16進数で完全なuint32_tを出力します

  14. 14

    Javascriptで64ビットの16進数から10進数

  15. 15

    2進数から偶数位置のビットを反転します

  16. 16

    Excel:通貨値を残りの行から分離する

  17. 17

    固有のエラーを残りから分離する

  18. 18

    boost :: property_treeを使用してXMLからの10進数とともに16進数を解析します

  19. 19

    Javaで8ビットを維持する16進数から2進数への変換

  20. 20

    16ビットレジスタのMSBから値を取得する

  21. 21

    符号付き64ビット整数を16進数と8進数で出力します

  22. 22

    バッファからn番目のビットを削除し、残りをシフトします

  23. 23

    16進数の文字列をビット文字列に変換します

  24. 24

    16進数を2進数から16進数に変換しますか?

  25. 25

    このtxnが残高を転送しなかったのはなぜですか、問題の応答セットとまったく同じ文字列と同じ16進数を渡しました

  26. 26

    smaliの編集。問題:下位16ビットをゼロにする必要があります。16進数のIDが間違っていますか?

  27. 27

    golangはnet.TCPConnからバイトを読み取り、メッセージの分離として4バイトを使用します

  28. 28

    C ++ std :: hexはバイトの順序を逆にしますか?(10進数を16進数として出力)

  29. 29

    10進クラスが残りの26ビットを使用しないのはなぜですか?

ホットタグ

アーカイブ