Uint8Array.prototype.setFromHex()
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
setFromHex()
は Uint8Array
インスタンスのメソッドで、この Uint8Array
オブジェクトを 16 進エンコードされた文字列のバイト列で埋めて、読み込んだバイト数と書き込んだバイト数を示すオブジェクトを返します。
このメソッドは、文字列をバイト配列に解釈します。文字列を単一の数値に変換するには、代わりに parseInt()
関数を、 radix
を 16
に設定して使用してください。
構文
setFromHex(string)
引数
string
-
Uint8Array
に書き込むバイト列をエンコードした 16 進文字列。文字列は次の条件を満たす必要があります。- 2 文字で 1 バイトをエンコードするため、文字数は偶数である必要があります。
- 0~9 および A~F (大文字と小文字を区別しない)の 16 進文字のみが含まれている必要があります。
- ホワイトスペースが含まれていないこと(
Uint8Array.prototype.setFromBase64()
とは異なります)。
文字列は、配列が満たされるまでの点までしか読み込まれませんので、その点以降の不正な 16 進構文は無視されます。
返値
次のプロパティが含まれているオブジェクトです。
read
-
入力文字列から読み込まれた 16 進文字の数。デコードされたデータが配列に収まる場合、これは入力文字列の長さです。そうでない場合、これは配列に収まる完全な 16 進文字の数です。
written
-
Uint8Array
に書き込まれたバイト数。このUint8Array
のbyteLength
より大きくなることはありません。
例外
SyntaxError
-
入力文字列に 16 進文字以外の文字が含まれているか、その長さが奇数の場合に発生します。
TypeError
-
入力文字列が文字列でない場合に発生します。
例
16 進文字列のデコード
この例では、16 進文字列を既存の Uint8Array
にデコードします。
const uint8Array = new Uint8Array(8);
const result = uint8Array.setFromHex("cafed00d");
console.log(result); // { read: 8, written: 4 }
console.log(uint8Array); // Uint8Array(8) [202, 254, 208, 13, 0, 0, 0, 0]
長い文字列を小さな配列にデコード
文字列に配列が保持できるデータ量以上のデータが含まれている場合、メソッドは配列が保持できるバイト数だけ書き込みます。
const uint8Array = new Uint8Array(4);
const result = uint8Array.setFromHex("cafed00d-some random stuff");
console.log(result); // { read: 8, written: 4 }
console.log(uint8Array); // Uint8Array(4) [202, 254, 208, 13]
余分な文字は、たとえそれが不正な文字であっても無視されます。ただし、入力文字列の合計長は偶数でなければなりません。
特定のオフセットでデータを設定
setFromHex()
メソッドは、常に Uint8Array
の先頭から書き込みを始めます。配列の途中から書き込む場合は、代わりに TypedArray.prototype.subarray()
に書き込むことができます。
const uint8Array = new Uint8Array(8);
// オフセット 2 から書き始める
const result = uint8Array.subarray(2).setFromHex("cafed00d");
console.log(result); // { read: 8, written: 4 }
console.log(uint8Array);
// Uint8Array(8) [0, 0, 202, 254, 208, 13, 0, 0]
仕様書
Specification |
---|
Uint8Array to/from base64 # sec-uint8array.prototype.setfromhex |