首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oraclize CBOR与python3 CBOR编码的表观失配

Oraclize CBOR与python3 CBOR编码的表观失配
EN

Ethereum用户
提问于 2018-04-28 21:00:31
回答 1查看 99关注 0票数 0

我使用Oraclize CBOR库编码了一个值,如下所示:

代码语言:javascript
复制
    Buffer.buffer memory cborArgs;
    Buffer.init(cborArgs, 64);
    cborArgs.startArray();
    cborArgs.encodeUInt(10);
    cborArgs.endSequence();

它产生:

代码语言:javascript
复制
\\xef\\xbf\\xbd\\\\n

但它似乎与python3中相同编码的结果不匹配。

代码语言:javascript
复制
print(str(cbor2.dumps([10]))

产生

代码语言:javascript
复制
\x81\n

到底怎么回事?

EN

回答 1

Ethereum用户

回答已采纳

发布于 2018-04-30 16:37:57

您可能想要引用每一个的十六进制表示。在使用十六进制表示时,您可以看到它们几乎是相同的,不同的是python的cbor2定义了长度为3的静态数组,而cbor库只是使用动态大小的数组来提高链上的效率和适应性。两者都符合cbor标准。

坚固性

代码语言:javascript
复制
    Buffer.buffer memory cborArgs;
    Buffer.init(cborArgs, 64);
    cborArgs.startArray();
    cborArgs.encodeUInt(1);
    cborArgs.encodeUInt(222);
    cborArgs.encodeUInt(9000);
    cborArgs.endSequence();
    debug(cborArgs.buf);

debug[ "0x9f0118de192328ff" ]

Python

import cbor2 import binascii print(binascii.b2a_hex(cbor2.dumps([1, 222, 9000])))

b'830118de192328'

正如您所看到的,只有第一个字节不同,它指定的是动态的,而不是静态的3元素数组。这反过来需要一个额外的FF字节来终止它。

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/47001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档