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 ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.