У меня есть 3D-объем, представленный как вектор вектора вектора плавания, который я хочу сохранить в двоичный файл. (Это объем плотности, восстановленный по рентгеновским изображениям, полученным с помощью компьютерного томографа.)
Теперь я мог сделать это следующим образом:
//iterate through the volume
for (int x = 0; x < _xSize; ++x){
for (int y = 0; y < _ySize; ++y){
for (int z = 0; z < _zSize; ++z){
//save one float of data
stream.write((char*)&_volume[x][y][z], sizeof(float));
}
}
}
Это в основном работает. Однако я спрашиваю себя, насколько это не зависит от платформы. Я хотел бы создать файл, который будет идентичным независимо от системы, в которой он был создан. Таким образом, могут быть машины под управлением Windows, Linux или Mac, у них может быть 32-битная или 64-битная длина слова и порядок байтов с прямым или обратным порядком байтов.
Полагаю, если бы я сделал это так, как это было сделано выше, этого не было бы. Как я мог этого добиться? Я слышал о сериализации, но не нашел конкретного решения для этого случая.
float
илиdouble
может или не может соответствовать представлению IEEE 754, поэтому дело не только в сериализации байтов ваших переменных. Вместо этого вам понадобится инструмент, поддерживающий платформу, для записи / анализа IEEE 754 бит. Я нашел этот beej.us/guide/bgnet/output/html / multipage /, где предоставляются некоторые инструменты, хотя они кажутся неполными. - person Ramón Gil Moreno   schedule 30.04.2015