Начал писать свой оптимизатор-транслятор кода for fun. Я новичок в c++ и ЯВУ. Ввожу число с консоли. Пример 1048575. Этот код записывает в файл 00 0F FF FF:
#include <iostream>
#include <fstream>
using namespace std;
int main() {
int exe[100000];
ofstream ofile;
ofile.open("s.bin", ios::out | ios::app | ios::binary);
int n = 0;
while (n < 10000) {
cin >> n;
int n1 = n & 255;
int n2 = (n>>8) & 255;
int n3 = (n>>16) & 255;
int n4 = (n>>24) & 255;
ofile << static_cast<char>(n4);
ofile << static_cast<char>(n3);
ofile << static_cast<char>(n2);
ofile << static_cast<char>(n1);
}
ofile.close();
return 0;
}
Почитал что лучше работать с binary так:
#include <iostream>
#include <fstream>
using namespace std;
int n;
int main()
{
fstream f;
f.open("s.bin", ios::out | ios::app | ios::binary);
while (n < 10000) {
cin >> n;
f.write((char*)&n, sizeof(int));
}
system("pause");
return 0;
}
Но этот код пишет число не в том порядке, получается FF FF 0F 00. 1.Как исправить второй код? 2.Или лучше пользоваться своим велосипедом в первом? - Так как порядок байт я планировал контролировать в алгоритме при генерации. 3.Почему советуют второй код для работы с binary файлами? Проявятся ли какие-то "неудобства" при разрастании кода если оставить первый код?
Мне непонятно, почему вам непонятно :), что вы прочтете ровно то, что запишете.
Если вы записываете число с переставленными байтами - понятно, что вы и прочтете число с переставленными байтами, и вам действительно потребуется "костыль" - либо ваш, либо написанный более эффективно, скажем, в виде ассемблерной вставки.
Вопрос - зачем вам вообще писать байты не в том порядке? Почему вы решили выбрать именно big endian, работая на машине с little endian? Так ли это принципиально "for fun" (c)?
Второе - непонятно, откуда такие "советы", использовать подход C. Как правило, выбирается что-то одно - либо подход C, либо подход C++. Говорить, что лучше, а что хуже - развести тут holywar, так что скажу только, что они абсолютно совместимы по результатам и в конечном счете работают через API операционной системы :)
Виртуальный выделенный сервер (VDS) становится отличным выбором
У меня есть проект, который содержит в себе два других (использую subdirs)Вызовом нужных функций из подпроектов занимается класс MainWindow, который...
Имеется связь OneToMany, У одного Region есть много DistrictsИмеется простой REST контроллер, который возвращает все Region, но ответ приходит