序列化哪里出了问题
Where is the serialization going wrong?
void insert_into_stream(std::ostream& stream, int number)
{
int length = sizeof(int);
char insert_buffer[sizeof(int)];
memcpy(insert_buffer, &number, length);
stream.write(insert_buffer, length);
}
int int_from_string(std::string string)
{
int a;
std::istringstream(string)>>a;
return a;
}
这段代码以前曾经工作过,我不记得我做了什么细微的更改,它不再工作了。当一个数字(例如,8001(进来时,我在最后一个语句之前进行调试,insert_buffer包含"A",所以显然出了点问题,第二个函数没有检索到8001。
注意 - 在将流发送到第二个函数之前,我确实将流转换为字符串。
第一个功能哪里错了?
---编辑----
是的,我错了,第一个功能实际上是做它应该做的,第二个是错误的,任何人都可以解决这个问题吗?
这两个函数正在做完全不同的事情。
第一个函数是将整数的原始二进制表示形式写出到流中。
您刚刚复制了位,如果您要序列化为二进制文件,这是正确的做法。
要将其转换回来,您必须读取这 4 个字节,并将其转换为整数,就像您正在做相反的方式一样。
当然,当您检查字符时,它们将是整数位的单字节ascii表示形式。因此,"A"在那里是一个完全合理的东西,就像其他任何东西一样,因为它完全没有意义。
然而,第二个功能是进行ASCII数到整数的转换。 atoi
. 这对于您要执行的操作毫无意义,因为这些字符不是 ascii 数字,而是二进制整数。
编辑:你想要这样的东西,与你上面所做的相反。
int int_from_string(const char* number)
{
int a;
memcpy(&a, number, sizeof(int));
return a;
}
尝试使用
stream.write((const char*)&number, sizeof(number));
它要短得多,您还可以更改数字的类型,它将起作用(对于简单类型(。
相关文章:
- C++boost序列化多态性问题
- 提升序列化 1:73 的向后兼容性问题
- Protobuf中重复字段的问题.使用重复字段进行序列化/反序列化的更好方法是什么?
- 在 C# 中序列化这些值以在C++中作为已知结构正确读取时遇到问题
- 使用 boost::序列化将派生类指针序列化为向量时出现问题
- 更改命名空间以自定义 Boost XML 的标记名称后的反序列化问题
- 提升反序列化问题:运行时输入流错误 (c++)
- 如何解决序列化问题 MQL4?
- 序列化 压缩的问题与Boost库
- GPB 序列化到函数的问题
- xerces c 从刚刚序列化的对象创建对象的问题
- 使用 istream >> 反序列化时出现问题
- 调试Boost序列化segfault问题
- boost矢量序列化附加问题
- 序列化哪里出了问题
- 使用Boost:serialize反序列化指向派生类的指针时出现问题
- gSoap C++-C#反序列化问题
- 关于序列化、反序列化的设计问题
- BGL反序列化的另一个问题
- 抽象类的Boost二进制序列化问题