Python
 Computer >> コンピューター >  >> プログラミング >> Python

PythonのbinasciiモジュールでバイナリとASCIIを相互変換する方法

Pythonのbinasciiモジュールは、バイナリデータと各種ASCIIエンコード形式のバイナリ表現との間で相互変換を行うためのモジュールです。内部には高速化のためにC言語で実装された低レベル関数が含まれており、uubase64binhexといった高レベルモジュールの基盤としても利用されています。

binasciiモジュールの主な関数一覧

binasciiモジュールで定義されている関数は、命名規則に従って「a2b_*」(ASCII to Binary:ASCIIからバイナリへ)または「b2a_*」(Binary to ASCII:バイナリからASCIIへ)という名前が付けられています。

uuencode関連の関数

binascii.a2b_uu(string)
uuencodeされた1行分のデータをバイナリに復元して返します。通常、各行には45バイト(バイナリ)のデータが含まれ、最終行のみ例外となります。行データの末尾に空白文字が付加されていても問題ありません。

binascii.b2a_uu(data)
バイナリデータをuuencode形式のASCII文字列1行に変換します。戻り値は改行文字を含む変換後の行です。

Base64関連の関数

binascii.a2b_base64(string)
Base64エンコードされたデータのブロックをバイナリに復元して返します。

binascii.b2a_base64(data)
バイナリデータをBase64エンコードのASCII文字列に変換します。引数newlineがtrueの場合、戻り値には改行文字が含まれます。

Quoted-Printable関連の関数

binascii.a2b_qp(data)
quoted-printable形式でエンコードされたデータのブロックをバイナリに復元して返します。

binascii.b2a_qp(data)
バイナリデータをquoted-printableエンコーディングのASCII文字列に変換します。戻り値は変換後の行(複数行の場合あり)です。

BinHex4・RLE圧縮関連の関数

binascii.a2b_hqx(string)
binhex4形式のASCIIデータをRLE展開(解凍)を行わずにバイナリへ変換します。入力文字列は完全なバイト数を含むか、余ったビットがゼロである必要があります。

binascii.rledecode_hqx(data)
binhex4標準に従い、データに対してRLE(Run-Length Encoding)展開を実行します。

binascii.rlecode_hqx(data)
データに対してbinhex4スタイルのRLE圧縮を実行し、その結果を返します。

binascii.b2a_hqx(data)
binhex4方式によるバイナリからASCIIへの変換を実行し、結果の文字列を返します。引数のデータは事前にRLE圧縮されている必要があります。

CRCチェックサム計算の関数

binascii.crc_hqx(data, value)
valueを初期CRC値として、dataの16ビットCRC値を計算して返します。

binascii.crc32(data[, value])
valueを初期CRCとして、dataの32ビットチェックサム(CRC-32)を計算します。初期値を省略した場合のデフォルトは0です。

使用例

以下は、バイナリデータをBase64形式にエンコードし、再度デコードする基本的な例です。

import binascii

# バイナリデータを用意
data = b'Hello, Python!'

# バイナリ → Base64(ASCII)に変換
encoded = binascii.b2a_base64(data, newline=False)
print(encoded)  # b'SGVsbG8sIFB5dGhvbiE='

# Base64(ASCII) → バイナリに復元
decoded = binascii.a2b_base64(encoded)
print(decoded)  # b'Hello, Python!'

# CRC-32チェックサムの計算
crc = binascii.crc32(data)
print(crc)  # チェックサム値が出力される

このようにbinasciiモジュールを使えば、メール添付データやファイルの整合性チェックなど、バイナリとテキスト表現の相互変換を簡単かつ高速に行うことができます。

  1. PythonのBokehを使ったデータ可視化の基本ガイド

    Bokehは、Webブラウザ向けに設計されたPythonのデータ可視化ライブラリです。洗練された美しいグラフィックスを簡潔なコードで構築できるのが大きな特徴で、インタラクティブなプロットやダッシュボード、データアプリケーションを素早く簡単に作成できます。本記事では、Bokehを使ってさまざまな種類の基本的なグラフを作成する方法を解説します。 線グラフの描画 線グラフは、各点のx座標とy座標をそれぞれリストとして渡すことで作成できます。図の高さと幅を指定すれば、出力を直接ブラウザに表示することも可能です。さらに、線の太さや色といった追加のパラメータを指定することで、見た目を細かく調整できます。

  2. Pythonで二分探索木(BST)をシリアライズ・デシリアライズする方法

    シリアライズとデシリアライズとは? 本記事では、二分探索木(BST:Binary Search Tree)をシリアライズおよびデシリアライズするアルゴリズムをPythonで設計する方法を解説します。 シリアライズ(直列化)とは、データ構造やオブジェクトをビット列や文字列へ変換し、ファイルやメモリバッファへの保存、あるいはネットワーク越しの送信を可能にする処理のことです。一方、デシリアライズ(逆直列化)は、シリアライズされたデータから元のデータ構造を復元する逆のプロセスを指します。 例として、次のような二分木を考えてみます。 [5, 2, 9, 1, 3, 7] この場合、処理結果は以下のように