linux 在C++中将结构转换为uint8_t数组

bttbmeg0  于 2022-11-22  发布在  Linux
关注(0)|答案(2)|浏览(809)

我有一个typedef结构体,里面有不同的数据类型。数字数组有负值和非负值。我如何在Linux平台上用C++将这个结构体转换成unint8t数组。感谢你的帮助。谢谢。我尝试做这个对话的原因是将这个uint8_t缓冲区作为一个参数发送给一个函数。

typedef struct
{
  int enable;
  char name;
  int numbers[5];
  float counter;
};

感谢任何这样做的例子。谢谢

zour9fqk

zour9fqk1#

对于plain old data结构(如图所示),这是很简单的:
您知道结构的大小(以字节为单位)(通过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);
ej83mcc0

ej83mcc02#

建议:使用char*。对于该类型,C++允许您将任何指针强制转换为该类型并使用reinterpret_cast<char*>(&obj)。(假定为Obj obj;。)
如果需要使用uint8_t*(并且它不是char*的typedef),可以分配足够的内存并执行memcpy

uint8_t buffer[sizeof(Obj)];
memcpy(buffer, &obj, sizeof(obj));

相关问题