16進文字列(Hex string)
16進文字列は、PDF構文における2つの基本的な文字列オブジェクトタイプの1つで、バイナリデータを山括弧`<...>`で囲まれた16進数の桁ペアのシーケンスとして表現します。
16進文字列は、PDF構文における2つの基本的な文字列オブジェクトタイプの1つで、バイナリデータを山括弧<...>で囲まれた16進数の桁ペアのシーケンスとして表現します。括弧を使用するリテラル文字列とは異なり、16進文字列は特殊文字のエスケープを気にすることなく、任意のバイナリ値を明確にエンコードする方法を提供します
(
Citation: N.A., 2020
(N.A.).
(2020).
Document management — Portable document format — Part 2: PDF 2.0
.
International Organization for Standardization
Retrieved from
https://www.iso.org/standard/75839.html
)
。16進数の各ペア(0-9、A-F)は単一のバイト値を表すため、16進文字列は印刷不可能な文字、バイナリデータ、フォントエンコーディングのエンコードに特に有用です。
16進文字列は、山括弧内で16進表記を使用してバイナリデータをエンコードするPDFオブジェクトです。各バイトは正確に2つの16進文字(00からFF)で表されますが、PDFパーサーは奇数個の桁を持つ文字列を処理する際、最後の桁に暗黙的にゼロを追加する必要があります
(
Citation: N.A., 2020
(N.A.).
(2020).
Document management — Portable document format — Part 2: PDF 2.0
.
International Organization for Standardization
Retrieved from
https://www.iso.org/standard/75839.html
)
。例えば、<48656C6C6F>はASCII文字列"Hello"を表し、48が’H’、65が’e’、6Cが’l’、6Fが’o’に対応します。
16進文字列は、(括弧で囲まれた)リテラル文字列といくつかの重要な点で異なります。バックスラッシュでエスケープが必要な特殊文字を含むことができず、16進文字列内の空白文字はPDFプロセッサによって無視され、エスケープシーケンスの解釈を必要としないバイナリデータの予測可能な形式を提供します。16進数の桁は大文字でも小文字でもよく、スペース、タブ、ラインフィード、キャリッジリターンは空白として扱われ、解析時に無視されます。
PDF生成や操作を行う開発者にとって、16進文字列はいくつかの実用的なシナリオで不可欠です。暗号化データ、フォント文字マッピング、画像データ参照などのバイナリコンテンツを埋め込む際、16進文字列は特殊文字とエスケープシーケンスに関する曖昧さを排除します。これは、異なるシステムがリテラル文字列内のバックスラッシュエスケープを異なって解釈する可能性があるクロスプラットフォームのPDF生成を扱う際に特に重要です。
16進文字列は、PDFセキュリティ機能やデジタル署名を扱う際にも重要です。暗号化ハッシュや暗号化された値は、曖昧さなく表現される必要があるためです。さらに、PDFファイルのデバッグやPDFパーサーの実装時には、16進文字列は複雑なエスケープシーケンス処理なしに仕様要件に対して容易に検証できる、バイナリデータの人間が読める表現を提供します。
16進文字列は左山括弧<で始まり、0個以上の16進数の桁ペアを含み、右山括弧>で終わります。PDFプロセッサは各16進数の桁ペアを読み取り、対応するバイト値に変換します。
(
Citation: N.A., 2020
(N.A.).
(2020).
Document management — Portable document format — Part 2: PDF 2.0
.
International Organization for Standardization
Retrieved from
https://www.iso.org/standard/75839.html
)
によると、16進文字列内に現れる空白文字(スペース、水平タブ、ラインフィード、キャリッジリターン、ヌル、フォームフィード)は無視されるため、開発者は読みやすさのために長い16進文字列を複数行にわたってフォーマットできます。
奇数個の16進数の桁を持つ16進文字列を解析する際、準拠したPDFプロセッサは最後の桁に暗黙的に'0’を追加します。例えば、<901FA>は<901FA0>として扱われます。この動作により、不完全なバイト指定が一貫して処理されることが保証されます。結果として得られるバイトシーケンスは、16進文字列が現れるコンテキストに応じて解釈されます。PDF構造内のどこで使用されるかに応じて、生のバイナリデータ、テキストの文字コード、またはエンコードされた識別子を表す可能性があります。
16進文字列は<>を使用して空のデータを表すことができ、PDFの名前ツリー、暗号化辞書、フォントエンコーディングテーブル、および文字エンコーディングの懸念なしに明示的で明確な表現が必要なバイナリデータのあらゆる場所で一般的に使用されます。
- Literal string(リテラル文字列) – 特殊文字にバックスラッシュエスケープシーケンスを使用する、括弧で囲まれたテキスト文字列
- String object(文字列オブジェクト) – リテラル文字列と16進文字列の両方を含む、バイトシーケンスを表すPDFオブジェクトの一般的なカテゴリ
- Name object(名前オブジェクト) – 辞書内のキーを識別するスラッシュで始まるアトミックなPDFオブジェクトで、特殊文字に16進表記を使用
- Binary data(バイナリデータ) – 印刷不可能な値を含む可能性がある生のバイトシーケンスで、PDF表現では多くの場合16進文字列でエンコード
- PDF object(PDFオブジェクト) – 文字列、数値、辞書、配列を含む、PDFファイル構造を構成する基本的なデータ要素
- (N.A.) (2020)
- (N.A.). (2020). Document management — Portable document format — Part 2: PDF 2.0 . International Organization for Standardization Retrieved from https://www.iso.org/standard/75839.html
