缓冲区到结构体的转换
buffer to struct conversion
我正在尝试将字符串转换为结构。第一个字段中的结构体存储第二个字段中存在的字符数。请让我知道我在这个程序中错过了什么。我得到错误的输出(一些大整数值)
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;
}
你的方法是完全错误的。首先,整数的二进制表示取决于平台,即int
的sizeof
和硬件的端烷。其次,您将无法以这种方式填充char
指针,因此您需要创建一些编组代码,根据格式读取字节,将它们转换为int,然后分配内存并复制其余部分。将内存块强制转换到结构体的简单方法不适用于此结构体。
在SData对象中,一个整数占用4个字节。您的缓冲区使用一个字节。此外,字符'4'不同于整数的二进制形式4。
如果你想用ASCII表示一段数据,那么,是的,你需要做序列化。这并不是简单地希望将您认为是结构的内容的人类可读版本简单地强制转换为该数据。您必须选择一种序列化格式,然后编写代码或使用现有的库。
流行的选择:
- xml>json
- yaml
我会使用json - google"c++ json库"
相关文章:
- 使用结构体 c++ 进行强制转换
- 使用std::copy将一个结构体的数组转换为另一个结构的Vector
- 如何将c结构体定义转换为c++
- 使用memcpy将结构体转换为字符数组
- 在结构体中包装数字以避免隐式转换的利弊
- 将字符数组类型转换为结构体(不是类/对象)
- 缓冲区到结构体的转换
- 将结构体强制转换为QByteArray类型
- 从结构体到char *的转换问题
- 将malloc转换为新的c++ for结构体
- 将c++中的结构体转换为Ruby
- 多态和通过带指针的结构体进行强制转换
- 如何将结构体强制转换为char[]数组
- int型到自定义结构体的转换
- 将POD结构体强制转换为派生类型
- Boost Fusion:将适应的结构体类型转换为文本
- 将字符缓冲区转换为结构体
- 使用指针成员对结构体进行类型转换
- 如何从const char*转换为结构体
- 将c++类转换为C结构体(以及其他)