Я, честно говоря, очень запутался при чтении бинарных файлов в C.
Мои данные в формате, подобном:
- int header
- Cell [] [] ячейки, матрица 8x8
- Каждая ячейка - это просто короткий идентификатор и sbyte z.
Однако что-то явно не так, и ни одно из значений не является точным.
int i, j;
Block block;
// read 32 bits
fread( &(block.header), sizeof( int ), 1, mapFile );
// loop through to fill the 8x8 matrix
for( i = 0; i < 8; i++ )
{
for( j = 0; j < 8; j++ )
{
// read 16 bits
fread( &(block.cells[i][j].tileId), sizeof( short ), 1, mapFile );
// read 8 bits
fread( &(block.cells[i][j].z), sizeof( char ), 1, mapFile );
printf( "[%i][%i]: %x %i", i, j, block.cells[i][j].tileId, block.cells[i][j].z );
}
}
printf( "header: %i", block.header );
Вывод выше показывает кучу строк с [n][n]: ffffa800 251
.
Моя версия на C # работает нормально:
Block block;
block.header = reader.ReadInt32();
block.cells = new Cell[8,8];
for( int i = 0; i < 8; i++ )
{
for ( int j = 0; j < 8; j++ )
{
block.cells[i, j].tileId = reader.ReadInt16();
block.cells[i, j].z = reader.ReadSByte();
}
}
reader.Close();
Вывод из этого (правильно) показывает [n][n]: a8 -5
.