在javascript中将字符串转换为Uint8Array

Rob*_*bal 6 javascript

我有一个字符串“ab05d705”,我正在尝试将其转换为以下内容,以便我可以将其添加到 Uint8Array 中。那么如何将字符串转换"ab05d705"

0xab,0x05,0xd7,0x05 
Run Code Online (Sandbox Code Playgroud)

放入以下

var data = new Uint8Array([0xab,0x05,0xd7,0x05]); 
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激。

小智 8

Uint8Array 基本上是一个充满字符代码的数组,因此您可以拆分所有字符并将它们转换为字符代码,然后使用该数组并调用Uint8Array.from它。像这样的东西应该有效:

var string = "Hello World!"
var uint8 = Uint8Array.from(string.split("").map(x => x.charCodeAt()))
Run Code Online (Sandbox Code Playgroud)

  • 这仅适用于 ASCII 字符。ASCII 范围之外的字符(例如表情符号)需要超过 1 个字节才能以 UTF8 进行编码。这将生成垃圾字符串。 (5认同)

xim*_*imo 6

您可以使用 Web API TextEncoder从字符串中获取 UTF-8 字节的 Uint8Array:

\n
const encoded = new TextEncoder().encode(\'\xe2\x82\xac\')\nconsole.log(encoded) // Uint8Array(3) [226, 130, 172]\n
Run Code Online (Sandbox Code Playgroud)\n


Kme*_*low 5

如果您来自未来,Buffer.from(string,encoding)可能是最好的选择。

const uint: Uint8Array = Buffer.from('string here', 'base64')
Run Code Online (Sandbox Code Playgroud)


Sam*_*mmy 3

尝试这个:

var s = "ab05d705";
var result = [];

for(var i = 0; i < s.length; i+=2)
{
    result.push(parseInt(s.substring(i, i + 2), 16));
}
result = Uint8Array.from(result)
console.log(result);
Run Code Online (Sandbox Code Playgroud)

parseInt(value, base)创建一个结合输入和给定基数的 JS 数字 - 在本例中我们使用基数16