Я реализую приложение на основе 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
.Или, если значение установлено на 21
, то возвращается тип CborBooleanType
или CborNullType
.
Что не так с кодом
Как кодировать и декодировать uint8_t
с помощью TinyCbor.