Я очищаю часть нашего сетевого кода и заменяю различные целочисленные типы (int
, unsigned short
, ...) более подробными определениями типа explcit, такими как int32_t
и uint16_t
.double
и float
между разными компиляторами.Мы отправляем структуры, подобные следующим:
struct foo
{
uint32_t id;
double dbl;
};
...
// copy_packed() copies packed bytes of integral type and adheres
// to network byte-ordering
copy_packed(int32_t data, char* buffer, char* end);
copy_packed(uint32_t data, char* buffer, char* end);
copy_packed(uint16_t data, char* buffer, char* end);
...
// overload for structure types calls overloads for its members
void copy_packed(foo &data, char* buffer, char* end)
{
copy_packed(data.id, buffer);
copy_packed(data.id, buffer);
};
До сих пор используются только программы, скомпилированные с VC ++, но запланировано использование протокола на GCC.
Вопрос теперь: можетdouble
amd float
безопасно отправлять по проводам, даже если они интерпретируются различными компиляторами?Вопрос - насколько я понимаю - сводится к тому, соответствуют ли GCC и VC ++ IEEE754.Или, может быть, предоставить функции для преобразования в соответствующую упаковку?
Есть какие-нибудь советы по этому поводу?