Python で Raw Big-Endian 値を変換する方法

Python で Raw Big-Endian 値を変換する方法

PSD ファイルはほとんどのバイナリフィールドをビッグエンディアンのバイト順で格納します。生のフィールドを自分でデコードする必要がある場合—たとえば、画像リソースの生バイトから—BigEndianBitConverter はバイト配列からビッグエンディアンの 32 ビット整数を直接読み取ります。

ステップバイステップガイド

ステップ 1: パッケージをインストールする

git clone https://github.com/aspose-psd-foss/Aspose.PSD-FOSS-for-Python.git
cd Aspose.PSD-FOSS-for-Python
# No packaging manifest is published yet -- run from this folder,
# or add it to PYTHONPATH:
export PYTHONPATH=$PWD:$PYTHONPATH

ステップ 2: 必要なクラスをインポートする

from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.bigendianbitconverter import BigEndianBitConverter

ステップ 3: リソースの生バイトを読み取る

PsdImage.parsed_resources は下位レベルの UnknownResource オブジェクトを返し、各オブジェクトは data を介して生のペイロードを公開します:

image = PsdImage.load("input.psd")

for resource in image.parsed_resources:
    raw = resource.data

ステップ 4: 32 ビットビッグエンディアン値をデコードする

data = bytes([0x00, 0x00, 0x04, 0x10])  # example 4-byte big-endian field
value = BigEndianBitConverter.to_int32(data, 0)
print(f"Decoded value: {value}")  # 1040

to_int32(byte_array, offset) は offset から開始する 4 バイトを読み取り、最上位バイトが先になるように結合します。

一般的な問題と修正方法

IndexError 呼び出すとき to_int32. バイト配列は、開始位置から少なくとも4バイト利用可能でなければなりません offset — 確認 len(byte_array) >= offset + 4 呼び出す前に。

値がバイトスワップされているように見えます。 自分のコードの他の場所で、誤ってリトルエンディアン変換を使用していないことを確認してください — PSDリソースおよびヘッダー領域は一貫してビッグエンディアンであり、これが正に BigEndianBitConverter 想定しています。

よくある質問

BigEndianBitConverter は他の整数サイズをサポートしていますか?

このFOSSビルドでは、BigEndianBitConverter は to_int32 のみを提供します — 16ビットまたは64ビットのビッグエンディアン値の場合は、Python の組み込み int.from_bytes(data, byteorder="big") を使用してバイトを手動でデコードしてください。

通常の文書編集にこれが必要ですか?

いいえ — BigEndianBitConverter は、取得した生バイトを操作するための低レベルユーティリティです(例として、認識できない画像リソースから取得した場合など)。典型的な読み込み、編集、保存(参照 Core API の操作) は直接使用する必要はありません。

参照

 日本語