我正在尝试将字符串转换为结构。第一个字段中的结构存储第二个字段中存在的字符数。 请让我知道我在这个节目中缺少什么。 我输错了(一些大的整数值)
更新:此程序是否可以更正为打印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;
}
答案 0 :(得分:3)
你的做法是完全错误的。首先,整数的二进制表示取决于平台,即sizeof
int
和硬件的endiannes。其次,您将无法以这种方式填充char
指针,因此您需要创建一些根据格式读取字节的编组代码,将它们转换为int,然后分配内存并将其余部分复制到那里。在结构中使用内存块的简单方法不适用于此结构。
答案 1 :(得分:1)
在SData对象中,整数占用四个字节。您的缓冲区使用一个字节。此外,字符“4”不同于整数4的二进制形式。
答案 2 :(得分:1)
如果你想对一段数据进行ASCII表示,那么,是的,你需要进行序列化。这不仅仅是希望您认为结构内容的人类可读版本可以简单地转换为该数据。您必须选择序列化格式,然后编写代码或使用现有库。
热门选择:
我会使用json - google for&#34; c ++ json library&#34;