LINUX.ORG.RU

бинарное представление чисел


0

0

Насколько такое решение будет кросс-платформеным
template <typename T>
union TVal
{
  T val;
  char rep[sizeof(T)];
};
template <typename T>
ostream & operator <<(ostream &ostr, const TVal<T> & t)
{
  return ostr.write(t.rep,sizeof(T));
}
template <typename T>
istream & operator >>(istream &istr,TVal<T> & t)
{
  return istr.read(t.rep,sizeof(T));
}

Если запись будет происходить в Linux,а чтение в Windows.
Есть ли другие варианты?
★★

> Есть ли другие варианты?

template <typename T>
ostream & operator <<(ostream &ostr, const T& t)
{
  return ostr.write( t, sizeof(T) );
}

template <typename T>
istream & operator >>(istream &istr, T& t)
{
  return istr.read( t, sizeof(T) );
}

> Если запись будет происходить в Linux,а чтение в Windows.

Это зависит не от ОС, а от аппаратной платформы. Порядок байтов, формат хранения float'ов.

watashiwa_daredeska ★★★★
()
Ответ на: комментарий от watashiwa_daredeska

Тогда наверновсе же так:
template <typename T>
ostream & operator <<(ostream &ostr, const T& t)
{
  return ostr.write( &t, sizeof(T) );
}
...

Т.е. если читать и писать только на  x86, то проблем не будет?

Vinick ★★
() автор топика
Ответ на: комментарий от watashiwa_daredeska

>template <typename T>
>ostream & operator <<(ostream &ostr, const T& t)
>{
>  return ostr.write( t, sizeof(T) );
>}

Не получается.
Для базовых типов происходит вызов библиотечных операторов.

Vinick ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.