缓冲区到结构体的转换

buffer to struct conversion

本文关键字:转换 结构体 缓冲区      更新时间:2023-10-16

我正在尝试将字符串转换为结构。第一个字段中的结构体存储第二个字段中存在的字符数。请让我知道我在这个程序中错过了什么。我得到错误的输出(一些大整数值)

update:这个程序可以被纠正为打印4 (nsize)吗?

#include <iostream>
using namespace std;
struct SData
{
    int nsize;
    char* str;
};
void main()
{
    void* buffer = "4ABCD";
    SData *obj = reinterpret_cast< SData*>(buffer);
    cout<<obj->nsize;
}

你的方法是完全错误的。首先,整数的二进制表示取决于平台,即intsizeof和硬件的端烷。其次,您将无法以这种方式填充char指针,因此您需要创建一些编组代码,根据格式读取字节,将它们转换为int,然后分配内存并复制其余部分。将内存块强制转换到结构体的简单方法不适用于此结构体。

在SData对象中,一个整数占用4个字节。您的缓冲区使用一个字节。此外,字符'4'不同于整数的二进制形式4。

如果你想用ASCII表示一段数据,那么,是的,你需要做序列化。这并不是简单地希望将您认为是结构的内容的人类可读版本简单地强制转换为该数据。您必须选择一种序列化格式,然后编写代码或使用现有的库。

流行的选择:

    xml>json
  • yaml

我会使用json - google"c++ json库"