【问题标题】:How to convert a hex binary string to Uint8Array如何将十六进制二进制字符串转换为 Uint8Array
【发布时间】:2022-07-21 17:10:54
【问题描述】:

我有这个以十六进制表示的字节字符串:

const s = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8bV23J15O4\xb14\xb1H61417KKLL\xb50L5U\x8a\x05\x00\xf6\xaa\x8e.\x1c\x00\x00\x00"

我想将它转换为 Uint8Array 以便进一步操作它。

怎么做?

更新:

二进制字符串来自 python 后端。在 python 中,我可以正确地创建这个表示:

encoded = base64.b64encode(b'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8bV23J15O4\xb14\xb1H61417KKLL\xb50L5U\x8a\x05\x00\xf6\xaa\x8e.\x1c\x00\x00\x00')

【问题讨论】:

  • 该字符串包含一堆非十六进制字符。什么是例如\x8bV23J15O4 应该代表? \x8b 之后的所有内容都是文字吗?如果是,用什么字符编码?
  • @RobbyCornelissen 我更新了关于这个字符串来自哪里的问题

标签: javascript node.js


【解决方案1】:

在 Node.js 中,使用 Buffer.from 将(base64 编码的)字符串转换为 Buffer

const buffer = Buffer.from(encodedString, 'base64');

Buffers 是Uint8Array 的实例,因此可以在任何需要Uint8Array 的地方使用它们。引用文档:

Buffer 类是 JavaScript 的 Uint8Array 类的子类,并使用涵盖其他用例的方法对其进行了扩展。 Node.js API 接受普通的Uint8Arrays,只要Buffers 也受支持。

【讨论】:

  • base64 来自哪里?
【解决方案2】:

由于 JavaScript 字符串支持 \x 转义,这应该可以工作:

const s = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8bV23J15O4\xb14\xb1H61417KKLL\xb50L5U\x8a\x05\x00\xf6\xaa\x8e.\x1c\x00\x00\x00";

const array = Uint8Array.from([...s].map(v => v.charCodeAt(0)));

console.log(array);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    • 2016-07-07
    • 2013-02-07
    • 2021-10-30
    • 2017-05-26
    相关资源
    最近更新 更多