我正在实现基于 C++ 11 的应用程序,并且我正在使用TinyCbor C 库对应用程序特定数据进行编码和解码,如下所示:
#include "cbor.h"
#include <iostream>
using namespace std;
int main() {
struct MyTest {
uint8_t varA;
float vabB;
};
MyTest obj;
obj.varA = 100; // If I set it t0 below 20 then it works
obj.varB = 10.10;
uint8_t buff[100];
//Encode
CborEncode encoder;
CborEncode array;
cbor_encoder_init(&encoder, buff, sizeof(buff), 0);
cbor_encoder_create_array(&encode, &array, CborIndefiniteLength);
cbor_encode_simple_value(&array, obj.varA);
cbor_encode_float(&array, obj.varB);
cbor_encoder_close_container(&encoder, &array);
// Decode
CborParser parse;
CborValue value;
cbor_parser_init(buff, sizeof(buff), 0, &parser, &value);
CborValue array;
cbor_value_enter_container(&value, &array);
uint8_t val;
cbor_value_get_simple_type(&array, &val);
// This prints blank
cout << "uint8_t value: " << static_cast<int>(val) << endl;
float fval;
cbor_value_get_simple_type(&array, &fval);
cout << "float value: " << fval << endl;
return 0;
}
当我将值设置uint8_t varA
为低于 20 时,上面的代码有效,我看到 20 打印在控制台上,但如果我设置超过 20,那么有时它会给出错误CborErrorIllegalSimpleType
。或者如果 value 设置为21
then 它返回我的类型为CborBooleanType
or CborNullType
。
代码有什么问题
如何
uint8_t
使用 TinyCbor 进行编码和解码。