System.Classes.HexToBin

提供: RAD Studio API Documentation
移動先: 案内検索

Delphi

function HexToBin(const Text: PChar; TextOffset: Integer; var Buffer: TBytes; BufOffset: Integer; Count: Integer): Integer; overload;
function HexToBin(const Text: TBytes; TextOffset: Integer; var Buffer: TBytes; BufOffset: Integer; Count: Integer): Integer;
function HexToBin(Text: PWideChar; Buffer: PAnsiChar; BufSize: Integer): Integer;
function HexToBin(Text: PAnsiChar; Buffer: PAnsiChar; BufSize: Integer): Integer;
function HexToBin(Text: PWideChar; var Buffer; BufSize: Integer): Integer;
function HexToBin(Text: PAnsiChar; var Buffer; BufSize: Integer): Integer;
function HexToBin(Text: PWideChar; Buffer: Pointer; BufSize: Integer): Integer;
function HexToBin(Text: PAnsiChar; Buffer: Pointer; BufSize: Integer): Integer;

C++

extern DELPHI_PACKAGE int __fastcall HexToBin(const System::WideChar * Text, int TextOffset, System::DynamicArray<System::Byte> &Buffer, int BufOffset, int Count)/* overload */;

プロパティ

種類 可視性 ソース ユニット
function public
System.Classes.pas
System.Classes.hpp
System.Classes System.Classes


説明

16 進数字の文字列を、対応する 2 進値に変換します。

HexToBin を呼び出すと、16 進数の文字列 Text を、文字列を表す 2 進数値に変換することができます。

この関数は、次のパラメータを受け取ります:

パラメータ 説明

Text

16 進値を表す文字列のポインタです。

例: "1decaf"

メモ:
  • 16 進数では小文字を使用する必要があります。つまり、HexToBin では大文字を認識しません。 例: "ACDC66" は無効な文字列です。代わりに "acdc66" を使用する必要があります。
  • 入力文字の数は偶数でなければなりません。 つまり、"3d" も "c3f0" も有効な入力文字列ですが、"2" や "fda" は無効な文字列です。 これは、出力のバイナリ値がバイト(8 ビット)単位で、かつ、16 進文字では 4 ビットしか表されないからです。 "02" や "0fda" のように左側にゼロを付け加えて、値を変えずに有効な文字列に変換することができます。
  • この文字列は、NULL 終端文字列.

TextOffset
(省略可能)

入力文字列の先頭からスキップする文字の数です。

たとえば、Text が "608da975" で TextOffset が 4 の場合は、"a975" だけがバイナリに変換されます。

Buffer

16 進入力文字列の値を受け取るバイト配列のポインタです。

たとえば、入力文字列が "1decaf" の場合、出力バイナリ値は 00011101 11101100 10101111(3 バイト)になるでしょう。

BufOffset
(省略可能)

出力バイト配列の先頭からスキップするバイト数です。

たとえば、BufferHexToBin の呼び出し前に 00011101 11101100 10101111TextOffset が 1 の場合、HexToBin では 第 2 バイトから出力値の書き込みを開始し、第 1 バイト(00011101)はそのまま変わりません。

BufSize または
Count

出力バイト配列に変換するバイト(16 進文字のペア)の数です。

メモ: この値は、入力文字列の長さの半分および出力配列の長さより小さいか等しくなければなりません。 例:
  • 入力文字列が 8 文字長の場合、この数は 4 以下でなければなりません。
  • 配列が 8 バイト長の場合、この数は 8 以下でなければなりません。
  • 入力文字列が 8 文字長で配列が 8 バイト長の場合、この数は 4 以下でなければなりません(文字列の長さのため)。

HexToBin を呼び出すときは、入力文字列のオフセット(TextOffset)または出力バッファのオフセット(BufOffset)を指定しても指定しなくてもかまいません。 ただし、これらのオフセットを両方とも指定するか、両方とも指定しないか、のどちらかでなければなりません。

16 進文字でない文字が HexToBin で見つかった場合は、変換が中止され値が返されます。 たとえば、"9abcdefg" という文字列が与えられた場合、HexToBin では "9abcde" のみ変換します。次の文字ペア("fg")に無効な文字("g")が含まれているからです。

HexToBin の戻り値は、HexToBin の呼び出し内でオフセットを指定するかどうかによって変わります:

  • オフセットを指定した場合、入力文字列から読み取られ Buffer にバイナリで書き込まれたバイト数が戻り値になります。 たとえば、"9abcdefg" という文字列が与えられた場合、戻り値は 3 になります。読み取ったのが 3 バイトだからです("fg" には無効な文字が含まれているので "9abcde" のみ)。
  • オフセットを指定しなかった場合は、入力文字列から読み取られず Buffer にバイナリで書き込まれなかったバイト数(BufSize に書き込まれたバイト数を Buffer から差し引いた値)が戻り値になります。 たとえば、与えられた文字列が "9abcdefg" で BufSize が 4 の場合、戻り値は 1 になります。想定している 4 バイトのうち 3 バイトのみ読み取ったからです("fg" には無効な文字が含まれているので "9abcde" のみ)。

関連項目

コード サンプル