He estado buscando cómo convertir big-endian a little-endians. Pero no encontré ningún bien que pudiera resolver mi problema. Parece que hay muchas formas en que puedes hacer esta conversión. De todos modos, este código siguiente funciona bien en un sistema big-endian. Pero, ¿cómo debería escribir una función de conversión para que también funcione en el sistema little-endian?Convertir big endian a little endian al leer de un archivo binario
Esta es una tarea, pero es solo un extra ya que los sistemas en la escuela ejecutan el sistema big-endian. Es sólo que me picó la curiosidad y quería hacer que funcione en mi ordenador personal también
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream file;
file.open("file.bin", ios::in | ios::binary);
if(!file)
cerr << "Not able to read" << endl;
else
{
cout << "Opened" << endl;
int i_var;
double d_var;
while(!file.eof())
{
file.read(reinterpret_cast<char*>(&i_var) , sizeof(int));
file.read(reinterpret_cast<char*>(&d_var) , sizeof(double));
cout << i_var << " " << d_var << endl;
}
}
return 0;
}
Resuelto
Así Big-endian VS ascendente hacia la izquierda es sólo un orden inverso de los bytes. Esta función que escribí parece servir a mi propósito de todos modos. Lo agregué aquí en caso de que alguien más lo necesite en el futuro. Sin embargo, esto solo es para el doble, para enteros use la función recomendada por torak o puede modificar este código haciendo que intercambie solo 4 bytes.
double swap(double d)
{
double a;
unsigned char *dst = (unsigned char *)&a;
unsigned char *src = (unsigned char *)&d;
dst[0] = src[7];
dst[1] = src[6];
dst[2] = src[5];
dst[3] = src[4];
dst[4] = src[3];
dst[5] = src[2];
dst[6] = src[1];
dst[7] = src[0];
return a;
}
Incluso si resolvió su problema de endianess, los formatos de coma flotante pueden variar entre las plataformas. No puede guardar valores de coma flotante binarios en una plataforma y esperar cargarlos en otra. ¿Es un requisito que hagas este binario? – sbi
bien, no es un requisito ya que la tarea debe ser hecha y mostrada en las computadoras de la escuela. Es solo mi curiosidad que quiero saber cómo leer este archivo binario en una computadora con Windows. – starcorn
@sbi: ¿qué plataformas tienen implementado en la actualidad punto flotante en dispositivos que no sean IEE-754? – Kos