Ich habe einen Wert mit der Oraclize CBOR-Bibliothek wie folgt codiert:
Buffer.buffer memory cborArgs;
Buffer.init(cborArgs, 64);
cborArgs.startArray();
cborArgs.encodeUInt(10);
cborArgs.endSequence();
Was produziert:
\\xef\\xbf\\xbd\\\\n
Aber es scheint nicht mit dem Ergebnis der gleichen Codierung in Python3 übereinzustimmen.
print(str(cbor2.dumps([10]))
produziert
\x81\n
Was ist los?
Sie möchten sich wahrscheinlich auf die Hex-Darstellung von jedem beziehen. Wenn Sie die Hex-Darstellung verwenden, sehen Sie, dass sie fast identisch sind und sich nur darin unterscheiden, dass cbor2 von Python ein statisches Array der Länge 3 definiert, während die cbor-Bibliothek einfach ein Array mit dynamischer Größe für Effizienz und Anpassungsfähigkeit in der Kette verwendet. Beide entsprechen dem cbor-Standard.
Solidität
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'
Wie Sie sehen können, besteht der einzige Unterschied im ersten Byte, das ein dynamisches und kein statisches 3-Element-Array angibt. Dies erforderte wiederum ein zusätzliches FF-Byte zum Abschluss.