Mi sono guardato attorno su come convertire big-endian in little-endian. Ma non ho trovato nulla che potesse risolvere il mio problema. Sembra che ci sia un modo in cui puoi fare questa conversione. Comunque questo codice seguente funziona bene in un sistema big-endian. Ma come dovrei scrivere una funzione di conversione in modo che funzioni anche sul sistema little-endian?Converte big endian in little endian durante la lettura da un file binario
Questo è un compito a casa, ma è solo un extra dato che i sistemi a scuola utilizzano il sistema big-endian. E 'solo che mi sono incuriosito e volevo farlo funzionare sul mio computer di casa anche
#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;
}
Risolto
So Big-endian VS Little-endian è solo un ordine inverso dei byte. Questa funzione che ho scritto sembra comunque servire al mio scopo. L'ho aggiunto qui nel caso in cui qualcun altro ne avesse bisogno in futuro. Questo è solo per il doppio, tuttavia, per l'intero utilizzare la funzione torak suggerita oppure è possibile modificare questo codice facendolo passare solo di 4 byte.
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;
}
Anche se hai risolto il tuo problema di endianess, i formati in virgola mobile possono variare da una piattaforma all'altra. Non è possibile salvare i valori in virgola mobile su una piattaforma e aspettarsi di caricarli su un'altra piattaforma. E 'un requisito che fai questo binario? – sbi
beh non è un requisito dato che l'assegnazione deve essere eseguita e visualizzata sui computer della scuola. È solo la mia curiosità che voglio sapere come leggere questo file binario su un computer Windows. – starcorn
@sbi: quali piattaforme sono attualmente implementate in virgola mobile in non-IEE-754? – Kos