提问人:jkafernando 提问时间:11/10/2022 最后编辑:273Kjkafernando 更新时间:11/10/2022 访问量:639
在 C++ 中将 struct 转换为uint8_t数组
convert struct to uint8_t array in C++
问:
我有一个具有不同数据类型的 typedef 结构。number 数组具有负值和非负值。如何在 Linux 平台上将此结构转换为 C++ 中的 unint8t 数组。感谢这方面的一些帮助。谢谢。我尝试进行对话的原因是将此uint8_t缓冲区作为参数发送到函数。
typedef struct
{
int enable;
char name;
int numbers[5];
float counter;
};
感谢这样做的任何例子。谢谢
答:
0赞
Some programmer dude
11/10/2022
#1
对于像你展示的那种普通的旧数据结构,这是微不足道的:
您知道结构的大小(以字节为单位)(来自运算符)。sizeof
这意味着您可以创建该大小的字节向量。
一旦你有了这个向量,你就可以将结构对象的字节复制到向量中。
现在,您实质上拥有了结构对象的字节表示形式数组。
在代码中,它是这样的:
struct my_struct_type
{
int enable;
char name;
int numbers[5];
float counter;
};
my_struct_type my_struct_object = {
// TODO: Some valid initialization here...
};
// Depending on the compiler you're using, and its C++ standard used
// you might need to use `std::uint8_t` instead of `std::byte`
std::vector<std::byte> bytes(sizeof my_struct_object);
std::memcpy(bytes.data(), reinterpret_cast<void*>(&my_struct_object), sizeof my_struct_object);
评论
0赞
jkafernando
11/10/2022
是的,我知道结构的大小。如何将字节从结构复制到向量中?
0赞
lorro
11/10/2022
#2
建议:使用 .对于该类型,C++ 允许您强制转换指向它的任何指针并使用 .(假设 .)char*
reinterpret_cast<char*>(&obj)
Obj obj;
如果你需要使用(而且它不是 typedef to ,你可以分配足够的内存并执行:uint8_t*
char*
memcpy
uint8_t buffer[sizeof(Obj)];
memcpy(buffer, &obj, sizeof(obj));
评论
0赞
jkafernando
11/16/2022
因此,一旦通过 tcp 套接字发送 bufffer,我该如何在服务器端构造结构。欣赏一个例子
0赞
lorro
11/16/2022
@jkafernando 同样,你只需交换 dest 和 src: data is in ,然后 .buffer
memcpy(&obj, buffer, sizeof(obj));
下一个:如何在uint_8数组中存储负数
评论
typedef
struct
sizeof