Бинарные файлы Windows для iPhone - PullRequest
       2

Бинарные файлы Windows для iPhone

0 голосов
/ 17 сентября 2011

Безопасно ли передавать двоичные файлы из Windows на iPhone, которые записаны как:

std::ostream stream = // get it somehow
stream.write(&MyHugePODStruct, sizeof(MyHugePODStruct));

и читать как:

std::istream stream = // get it somehow
stream.read(&MyHugePODStruct, sizeof(MyHugePODStruct));

Хотя определение MyHugePODStruct такое же? если нет, то есть ли способ сериализовать это со стандартной библиотекой (включая c ++ 11) или безопасно повысить? Есть ли более чистый способ для этого, потому что это похоже на непереносимый кусок кода?

1 Ответ

1 голос
/ 17 сентября 2011

Нет, по многим причинам.Во-первых, это не скомпилируется, потому что вы должны передать char * в read и write.Во-вторых, это не гарантирует работу даже на одной платформе, потому что структура может содержать отступы (но сама она может различаться между разными версиями кода, даже скомпилированными, даже на одной платформе).Далее следует рассмотреть 64/32-битные проблемы, которые влияют на многие типы примитивов (например, long double дополняется до 12 байтов в x86, но до 16 байтов в x64).И последнее, но не менее важное: есть порядковый номер (хотя я не уверен, что такое порядковый номер в iOS).

Короче говоря, нет, не делайте этого.член отдельно, и в соответствии с его типом данных.

Вы можете проверить Boost.serialization, хотя у меня нет никакого опыта с этим.

...