gpt4 book ai didi

c++ - 使用 CBOR 编码和解码时出现问题

转载 作者:行者123 更新时间:2023-11-28 04:40:35 25 4
gpt4 key购买 nike

我有下面的类,我想使用 TinyCBOR 对其进行解码和编码.

class Test { 
public:
int a;
int b;
float c;
}

我正在做以下编码和解码这个类:

int main () {

Test t;
t.a = 10;
t.b = 20;
t.c = 3.30;

// Encode values
uint8_t buf[40];
CborEncoder encoder;
cbor_encoder_init(&encoder, &buf, sizeof(buf), 0);
cbor_encode_int(&encoder, t.a);
cbor_encode_int(&encoder, t.b);
cbor_encode_float(&encoder, t.c);


// Decode values
CborParser parser;
CborValue value;
int a;
int b;
float c;

cbor_parser_init(buf, sizeof(buf), 0, &parser, &value);
cbor_value_get_int(&value, &a);
cout << "Int A: " << a << endl;

cbor_value_get_int(&value, &b);
cout << "Int B: " << b << endl;

cbor_value_get_float(&value, &c);
cout << "Float C: " << c << endl;

return 0;
}

问题是我的程序打印:

A: 10
B: 10

它给出了读取 float 的错误。

可能是什么问题?
我也尝试添加 cbor_value_advance_fixed(&value); 但结果是一样的。
此外,我没有在 TinyCBOR 上找到任何编码/解码多个值的示例。网站。

最佳答案

文档确实不清楚,缺少示例,但显然,您必须将数据分组到映射或数组中。

#include <iostream>
#include "cbor.h"

using namespace std;

class Test {
public:
int a;
int b;
float c;
};

int main ()
{
Test t;
t.a = 10;
t.b = 20;
t.c = 3.30;

// Encode values
uint8_t buf[40];
CborEncoder encoder, array;
cbor_encoder_init(&encoder, buf, sizeof(buf), 0);
cbor_encoder_create_array(&encoder, &array, 3);
cbor_encode_int(&array, t.a);
cbor_encode_int(&array, t.b);
cbor_encode_float(&array, t.c);
cbor_encoder_close_container(&encoder, &array);

// Decode values
CborParser parser;
CborValue it, recursed;
int a;
int b;
float c;

cbor_parser_init(buf, sizeof(buf), 0, &parser, &it);
cbor_value_enter_container(&it, &recursed);
cbor_value_get_int(&recursed, &a);
cbor_value_advance_fixed(&recursed);
cout << "Int A: " << a << endl;

cbor_value_get_int(&recursed, &b);
cbor_value_advance_fixed(&recursed);
cout << "Int B: " << b << endl;

cbor_value_get_float(&recursed, &c);
cbor_value_advance_fixed(&recursed);
cout << "Float C: " << c << endl;
cbor_value_leave_container(&it, &recursed);

return 0;
}

关于c++ - 使用 CBOR 编码和解码时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50250757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com