hyp*_*not 0 c++ binary binaryfiles vector visual-studio-2010
我正在尝试通过编写C++应用程序与开源程序进行交互,该应用程序可以读取 - 修改 - 编写该程序使用的二进制文件格式.好处是程序是开源的,坏的是它的二进制文件不遵循任何"标准",只是它自己的阅读和保存方式.
这就是程序如何bool在文件中保存变量:
memset(keyword, 0, 100);
sprintf(keyword, "drawbox");
fout.write((char*)keyword, strlen(keyword)+1);
fout.write((char*)&m_drawBox, sizeof(bool));
Run Code Online (Sandbox Code Playgroud)
这是它如何阅读bool:
else if (strcmp(keyword, "drawbox") == 0)
fin.read((char*)&m_drawBox, sizeof(bool));
Run Code Online (Sandbox Code Playgroud)
这部分工作正常,我可以解析它.我也可以像整数一样解析单个变量.
我的问题在于它保存向量或四元数时的部分.
保存矢量position:
memset(keyword, 0, 100);
sprintf(keyword, "position");
fout.write((char*)keyword, strlen(keyword)+1);
fout.write((char*)&m_position, 3*sizeof(float));
Run Code Online (Sandbox Code Playgroud)
阅读矢量position:
fin.read((char*)&m_volMax, 3*sizeof(float));
else if (strcmp(keyword, "position") == 0)
Run Code Online (Sandbox Code Playgroud)
所以这些都是原始源代码的片段.在我的代码中,如果我尝试使用以下内容,我会遇到问题.
以下是我的代码中的部分:
struct Vec
{
float x,y,z;
};
Vec m_position;
else if (strcmp(keyword, "position") == 0)
fin.read((char*) &kf.m_position, 3*sizeof(float));
Run Code Online (Sandbox Code Playgroud)
但这不起作用.以下是我从示例文件中获取的值:
m_position x = -1.07374e+008
m_position y = -1.07374e+008
m_position z = -1.07374e+008
Run Code Online (Sandbox Code Playgroud)
所以这些值不会被分成x,y,z,它们会被重复到相同的x,y,z部分!
有人可以帮助我造成这种情况吗?实际上这种保存文件的方式是什么?使用(*char)将内存直接写入文件是不是一个奇怪的想法?
这是原始文件中对应于3*浮点向量m_position的二进制数据.
45 01 67 44 9E 57 19 C3 48 14 09 45
Run Code Online (Sandbox Code Playgroud)
m_position x = -1.07374e + 008
如果你看看调试器的原始内存视图的值,你会看到float的字节值是0xcccccccc.这是一个特殊值,MSVC编译器使用它来初始化Debug构建中的变量.
换句话说,您的m_position变量从未被分配.
缺少更多信息,至少有一个简单的解释:fin.read()调用没有读取任何内容.我必须假设您的代码不包含任何错误检查,这是一个常见的遗漏.
| 归档时间: |
|
| 查看次数: |
233 次 |
| 最近记录: |