这是什么缓冲区



我使用的是一个奇怪的区块链,它的API返回数据如下:

0x36333562663261376537333436376636333363313931353738613938383137313663383633306235373164613034643634303334356331646232333231636537

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

那么,有人能建议如何解码吗?由于它都是数字,我假设它是以10为基础的,但我们会有不同的字节长度(64和128(等。

由于有很多2和3,我猜测这可能是一个2字节与3字节的指标

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

现在我知道我传递的原始字符串是64个十六进制字符。我要回128位小数。

我正在JS中寻找一个转换器来取回十六进制字符串

我试过atob和Buffer,但还没有破解。。。

Javascript-Unicode字符串和ArrayBuffer 之间的转换

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

3633356266->36 33 35 62 66

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

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

所以你可以看到,你原来的十六进制字符串(从635bf开始(再次被重新编码为十六进制并发送回你——本质上,它被视为一个字符串,而不是一个十六进制值字符串(我相信这就是你想要解释的(。

要对其进行解码,您可以非常简单地将其拆分为2个字符的块,并获得具有该值的ASCII代码点,然后将其重新连接在一起(还可以修剪起始处的"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);

最新更新