繁体   English   中英

Hyperledger Fabric API 返回缓冲区类型数据,我如何在 javascript 中将缓冲区转换为该数据的字符串

[英]Hyperledger Fabric API returns a buffer type data, how do i convert buffer to string of this data in javascript

我正在超级账本结构(node.js SDK)上构建区块链。

https://hyperledger.github.io/fabric-sdk-node/release-1.4/global.html#BlockchainInfo__anchor

我调用 api BlockchainInfo并获得json格式响应,其中包括currentBlockHash

官方文档显示currentBlockHash的响应数据类型Array<byte>

比如下面的数据。

我想将此缓冲区转换为字符串,但不知道该怎么做。

感谢您阅读这个问题。

{ buffer:
   { type: 'Buffer',
     data:
      [ 8,
        207,
        230,
        17,
        18,
        32,
        124,
        143,
        73,
        40,
        171,
        42,
        251,
        237,
        193,
        138,
        36,
        92,
        58,
        57,
        254,
        56,
        144,
        96,
        54,
        201,
        242,
        64,
        10,
        111,
        150,
        28,
        198,
        187,
        196,
        118,
        97,
        160,
        26,
        32,
        16,
        160,
        154,
        19,
        11,
        179,
        147,
        11,
        38,
        16,
        150,
        190,
        126,
        17,
        121,
        123,
        200,
        7,
        71,
        27,
        241,
        103,
        54,
        188,
        196,
        248,
        178,
        88,
        48,
        115,
        186,
        133 ] },
  offset: 6,
  markedOffset: -1,
  limit: 38,
  littleEndian: true,
  noAssert: false }

这是原始响应数据

{"height":{"low":291663,"high":0,"unsigned":true},"currentBlockHash":{"buffer":{"type":"Buffer","data":[8,207,230,17,18,32,124,143,73,40,171,42,251,237,193,138,36,92,58,57,254,56,144,96,54,201,242,64,10,111,150,28,198,187,196,118,97,160,26,32,16,160,154,19,11,179,147,11,38,16,150,190,126,17,121,123,200,7,71,27,241,103,54,188,196,248,178,88,48,115,186,133]},"offset":6,"markedOffset":-1,"limit":38,"littleEndian":true,"noAssert":false},"previousBlockHash":{"buffer":{"type":"Buffer","data":[8,207,230,17,18,32,124,143,73,40,171,42,251,237,193,138,36,92,58,57,254,56,144,96,54,201,242,64,10,111,150,28,198,187,196,118,97,160,26,32,16,160,154,19,11,179,147,11,38,16,150,190,126,17,121,123,200,7,71,27,241,103,54,188,196,248,178,88,48,115,186,133]},"offset":40,"markedOffset":-1,"limit":72,"littleEndian":true,"noAssert":false}}

我认为 JSDoc 在这种情况下具有误导性。 我认为currentBlockHash实际上是一个 Node.js 缓冲区(或者可能是一个模拟缓冲区行为的 protobuf 实现)。 您可以通过调用currentBlockHash.toString()将 Buffer 转换为字符串。

我观察到一些情况,在 protobuf 缓冲区实现上调用 toString() 会给出一个调试字符串,而不是缓冲区内容的字符串表示,所以我倾向于指定一个编码参数以确保安全。

在 hash 的情况下,无论如何将其视为十六进制字符串而不是 utf8 (这将是默认值)可能更方便,所以我会尝试currentBlockHash.toString('hex')

有关缓冲区的更多信息,请参见此处: https://nodejs.org/docs/latest-v10.x/api/buffer.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM