Я искал, как преобразовать big-endian в little-endians. Но я не нашел ничего хорошего, который мог бы решить мою проблему. Кажется, у вас есть много способов сделать это преобразование. Во всяком случае, этот следующий код работает нормально в системе большого числа. Но как мне написать функцию преобразования, так что она будет работать и на мало-конечной системе?
Это домашнее задание, но это просто лишний раз, поскольку в школах, работающих в системе большой энтирии, есть системы. Это просто, что мне стало любопытно и хотелось, чтобы он работал на моем домашнем компьютере.
#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;
}
решаемые
Итак, Big-endian VS Little-endian - это всего лишь обратный порядок байтов. Эта функция, я написал, кажется, все равно служит моей цели. Я добавил его здесь, если кому-то это понадобится в будущем. Это выполняется только для double, хотя для integer либо используется предложенная функция torak, либо вы можете изменить этот код, заменив только 4 байта.
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;
}