这是什么缓冲区?

what kind of a buffer is this?

我正在使用一个奇怪的区块链,它的 API returns 数据如下:

0x36333562663261376537333436376636333363313931353738613938383137313663383633306235373164613034643634303334356331646232333231636537

现在,我知道这是我发送的字符串,实际上是 64 十六进制字符串 如上所述,我得到了 128 个字符(加上 0x)。

所以有人可以建议如何解码吗? 因为它都是数字,我假设它是 base10,但是我们会有不同的字节长度(64 对 128)等

因为有很多 2 和 3,我猜这可能是 2 对 3 字节的指标

它是某种类型的 unicode 数组吗? 前面的“0x”让我认为它是十六进制值,但这里没有实际的 DEADBEEF...

现在我知道我传入的原始字符串是 64 个十六进制字符。 我得到了 128 位小数。

我正在寻找 JS 中的转换器来取回十六进制 'string'

我试过atob和Buffer但是还没破解...

Javascript - Converting between Unicode string and ArrayBuffer

如果您查看十六进制对(代表每个字节),您最初发送的十六进制字符串已被重新十六进制化或重新编码为十六进制。例如,返回字符串的前 5 个字节如下所示:

3633356266 -> 36 33 35 62 66

这些都是有效的 ASCII 字符,解码为:

0x36 -> '6'
0x33 -> '3'
0x35 -> '5'
0x62 -> 'b'
0x66 -> 'f'

因此您可以看到,您的原始十六进制字符串(以 635bf 开头)再次被重新编码为十六进制并发送回给您 - 本质上,它被视为一串字符而不是一串十六进制值(我相信这就是您希望将它们解释为的内容)。

要对其进行解码,您可以非常简单地将其拆分为 2 个字符的块并获取具有该值的 ASCII 代码点,然后将它们重新连接在一起(还有 trim '0x ' 从头开始​​):

const returnedStr = "0x36333562663261376537333436376636333363313931353738613938383137313663383633306235373164613034643634303334356331646232333231636537";

let hexBytes = returnedStr.slice(2).match(/.{1,2}/g);

let decodedStr = hexBytes.reduce((str, curr) => str + String.fromCharCode(parseInt(curr, 16)), "");

console.log(decodedStr);