我使用Oraclize CBOR库编码了一个值,如下所示:
Buffer.buffer memory cborArgs;
Buffer.init(cborArgs, 64);
cborArgs.startArray();
cborArgs.encodeUInt(10);
cborArgs.endSequence();它产生:
\\xef\\xbf\\xbd\\\\n但它似乎与python3中相同编码的结果不匹配。
print(str(cbor2.dumps([10]))产生
\x81\n到底怎么回事?
发布于 2018-04-30 16:37:57
您可能想要引用每一个的十六进制表示。在使用十六进制表示时,您可以看到它们几乎是相同的,不同的是python的cbor2定义了长度为3的静态数组,而cbor库只是使用动态大小的数组来提高链上的效率和适应性。两者都符合cbor标准。
坚固性
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字节来终止它。
https://ethereum.stackexchange.com/questions/47001
复制相似问题