Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 编程测试中ifstream的帮助_C++ - Fatal编程技术网

C++ 编程测试中ifstream的帮助

C++ 编程测试中ifstream的帮助,c++,C++,我最近做了一个编程测试,其中有一个ifstream部分我无法解决。从那以后,我一直试图在空闲时间解决这个问题,但没有结果 问题基本上是从二进制文件中读取并提取其中的信息 以下是文件格式: ------------------------------------------------------------------------------ | File Offset (in Bytes)| Value Type | Value Description

我最近做了一个编程测试,其中有一个ifstream部分我无法解决。从那以后,我一直试图在空闲时间解决这个问题,但没有结果

问题基本上是从二进制文件中读取并提取其中的信息

以下是文件格式:

------------------------------------------------------------------------------ | File Offset (in Bytes)| Value Type | Value Description | ------------------------------------------------------------------------------ | 0 | Unsigned Integer (32 bits) | number of entities | ------------------------------------------------------------------------------ | 4 | Entity information (see | Entity 0 | | | below) | | ------------------------------------------------------------------------------ | 4+32 | Entity Information | Entity 1 | ------------------------------------------------------------------------------ | ... | ... | ... | ------------------------------------------------------------------------------ | 4 + (32 * N) | Entity Information | Entity N | ------------------------------------------------------------------------------ Entity Information: ------------------------------------------------------------------------------ | Offsett (in Bytes)| Value Type | Value Description | ------------------------------------------------------------------------------ | 0 | Unsigned short (16 bits) | Unique ID | ------------------------------------------------------------------------------ | 2 | Unsigned short (16 bits) | Entity type ID | ------------------------------------------------------------------------------ | 4 | Single-precision float (32 | Position X coordinate | | | bits) | | ------------------------------------------------------------------------------ | 8 | Single-precision float (32 | Position Y coordinate | | | bits) | | ------------------------------------------------------------------------------ | 12 | Single-precision float (32 | Forward Normal X | | | bits) | Component | ------------------------------------------------------------------------------ | 16 | Single-precision float (32 | Forward Normal Y | | | bits) | Component | ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ |文件偏移量(字节)|值类型|值说明| ------------------------------------------------------------------------------ |0 |无符号整数(32位)|实体数| ------------------------------------------------------------------------------ |4 |实体信息(见|实体0| ||以下)|| ------------------------------------------------------------------------------ |4+32 |实体信息|实体1| ------------------------------------------------------------------------------ | ... | ... | ... | ------------------------------------------------------------------------------ |4+(32*N)|实体信息|实体N| ------------------------------------------------------------------------------ 实体信息: ------------------------------------------------------------------------------ |偏移量(字节)|值类型|值说明| ------------------------------------------------------------------------------ |0 |无符号短(16位)|唯一ID| ------------------------------------------------------------------------------ |2 |无符号短(16位)|实体类型ID| ------------------------------------------------------------------------------ |4 |单精度浮点(32 |位置X坐标| ||位|| ------------------------------------------------------------------------------ |8 |单精度浮点(32 |位置Y坐标| ||位|| ------------------------------------------------------------------------------ |12 |单精度浮点(32 |正向法线X| ||位)|组件| ------------------------------------------------------------------------------ |16 |单精度浮动(32 |正向正常Y| ||位)|组件| ------------------------------------------------------------------------------ 这是我的代码:

void readFile() 
{
  ifstream ifs ( "binaryFile.bin" , ifstream::in );

  while (ifs.good())
  {
    int numEntities = 0;
    ifs.read( (char*)&(numEntities), sizeof(unsigned short));

    for(int i=0; i<numEntities; i++)
    {
      unsigned short uID;
      unsigned short eID;
      float x;
      float y;
      float forward_x;
      float forward_y;

      ifs.read( (char*)&(uID), sizeof(unsigned short) );
      ifs.read( (char*)&(eID), sizeof(unsigned short) );
      ifs.read( (char*)&(x), sizeof(float) );
      ifs.read( (char*)&(y), sizeof(float) );
      ifs.read( (char*)&(forward_x), sizeof(float) );
      ifs.read( (char*)&(forward_y), sizeof(float) );
    }
  }
  ifs.close();
}
void readFile()
{
ifstream-ifs(“binaryFile.bin”,ifstream::in);
而(ifs.good())
{
整数=0;
ifs.read((char*)和(numenties),sizeof(unsigned short));

对于(int i=0;i当你说你有问题时,你看到了什么输出,它与你期望看到的有什么不同

一些一般性建议:首先,如果要读取二进制数据,请尝试以二进制模式读取流

另外,您的第一次
read
操作将数据存储到
int
中,但读取的长度是
无符号短的
。这是故意的吗


当您将指针转换为
char*
作为第一个参数以读取
时,请尝试使用显式
重新解释转换

您将
numenties
视为一个16位的短值,而(根据规范和声明)它应该是32位整数。您读取的是两个字节(
sizeof(unsigned short)
)而不是4;尝试
sizeof(int)
,并在其中抛出一些:

assert(sizeof(unsigned short) == 2);
assert(sizeof(int) == 4);
assert(sizeof(float) == 4);

为什么不把
numEntities
做成一个
unsigned short
?我刚才使劲掌心,邻居们都听到了。谢谢。如果你想确保你为每个项目读取了正确的字节数,请使用稍微不容易出错的语法
sizeof(numenties)
而不是
sizeof(int)