🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1051閲覧

Python 20桁の16進数を16桁で5個の2進数に分けたい

kouyou-

総合スコア6

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/11/11 08:45

編集2019/11/11 09:00

python初心者です。もしよろしければアドバイスのほうよろしくお願いします。
20桁の16進数(例:00112233445566778899)を最終結果として4桁の2進数を20個にしたいです。そこで、試しに私は20桁の16進数を80桁の2進数に変換してから16桁の2進数5個に分けてみたらTypeError: unsupported operand type(s) for >>: 'str' and 'int'
と出てきてstr関数に変換したためこのような結果になったのかなと思いました。
なので、20桁の16進数から4桁の16進数5個に分けてから16桁の2進数5個というような流れに変えたらうまくいくのかなと思いましたが、やり方がうまく思いつきませんでした。
どのようにすれば、うまく動作するようになるでしょうか。すみませんよろしくお願いします。

i = 0x00112233445566778899 bin_str = bin(i) print(bin_str) split1 = (bin_str >> 16*4) & 0xffff split2 = (bin_str >> 16*3) & 0xffff split3 = (bin_str >> 16*2) & 0xffff split4 = (bin_str >> 16*1) & 0xffff split5 = (bin_str >> 16*0) & 0xffff print(f'{split1:016b}') print(f'{split2:016b}') print(f'{split3:016b}') print(f'{split4:016b}') print(f'{split5:016b}')

こちらが、20桁の16進数から16桁2進数5個に試しに分けてみたもので上に書いたようなエラーが出たものです。
説明がとても下手で分かりずらいとは思いますがアドバイスよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

何進数か、というのは表示のときだけ気にすれば良いです。
コンピュータ内では一切区別されません。

Python

1print(0b1111 == 0o17) # => True 2print(0b1111 == 15) # => True 3print(0b1111 == 0xF) # => True

Python

1print(0b1111 << 2) # => 60 2print(0o17 << 2) # => 60 3print(15 << 2) # => 60 4print(0xF << 2) # => 60

Python

bin_str = bin(i)

必要ありません。

投稿2019/11/11 10:13

LouiS0616

総合スコア35668

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

16桁の2進数ということは、16進数4桁分、ということです。
ということで、
0. 20桁の16進数を、4桁づつ5個に分ける
0. 4桁16進を2進数に変換
0. これを5回繰り返す

と言う手順でどうでしょうか


20桁が数値なら話はかんたん
0. 元データ下位16ビットを2進数に変換、出力
0. 元データを16ビット右シフト
0. 5回繰り返す

で、どうぞ

投稿2019/11/11 08:56

編集2019/11/11 09:13
y_waiwai

総合スコア88038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問