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

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

詳細はこちら
バイナリ

バイナリは、「0」と「1」だけで表現されている2進数のデータ形式。または、テキスト以外の情報でデータが記述されているファイルを指します。コンピューター内の処理は全て2進数で表記されています。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Python

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

Q&A

解決済

2回答

4308閲覧

pythonで、バイナリファイルに16進数から書き込みたいです

movswr

総合スコア13

バイナリ

バイナリは、「0」と「1」だけで表現されている2進数のデータ形式。または、テキスト以外の情報でデータが記述されているファイルを指します。コンピューター内の処理は全て2進数で表記されています。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Python

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

0グッド

3クリップ

投稿2021/03/22 06:19

編集2021/03/22 06:26

前提・実現したいこと

42 5f 00 00 などの16進数が書かれたテキストファイルがあります。
Pythonで、このデータをそのまま別のバイナリファイルに書き込みたいのですが手順が分かりません。どのような方法が良いのでしょうか?

試したこと

調べてみましたが、16進数を文字列に変換する例しか見つからず、苦戦しております。
テキストファイルを読み込んで一行ずつstr配列に入れてみました。

イメージ

テキストファイルの内容はこんな感じです。
42 5f ff 00
00 00 00 00
22 00
22 00
00 00 00 00
00 00 00 00

完成したバイナリファイルをバイナリエディタでhex表示した内容はこの通りです
42 5f ff 00 00 00 00 00-22 00 22 00 00 00 00 00
00 00 00 00

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

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

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

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

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

guest

回答2

0

16進数文字列から数値のリストを経由してバイト列を作る別解。

  • "5f"などの文字列を16進数表記と見なして整数に変換するには、int("5f", 16)とすればいい。
  • 整数のリストをバイト列に変換するために、組み込み関数のbytesを使う。

Python

1with open("sample.txt") as f: 2 result_bytes = bytes([int(s, 16) for s in f.read().split()]) 3 4with open('sample.bin', 'wb') as f: 5 f.write(result_bytes)

投稿2021/03/22 07:48

Daregada

総合スコア11990

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

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

movswr

2021/03/22 08:39

ありがとうございます!恐ろしく簡潔ですね、驚きです。 この方法だと意味が視認できていいですね。参考になりました。
guest

0

ベストアンサー

空白削除して、"425fff00"等にして、bytes.fromhex()でバイト列になります。

投稿2021/03/22 07:06

otn

総合スコア85888

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

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

movswr

2021/03/22 10:01 編集

ありがとうございます。解決しました!
otn

2021/03/22 12:11

空白削除しなくても良いみたいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問