#java #cpp
Например, мои коды на языках программирования Java и C++ дают разные бинарные файлы.
Код на C++:
char fileName[100];
cin >> fileName;
int N;
cin >> N;
ofstream file(fileName, ios::binary);
for (int i = 2, j = 1; j <= N; i += 2, j++)
file.write( reinterpret_cast(&i), sizeof(i) );
file.close();
Код на Java:
RandomAccessFile ra = new RandomAccessFile(scanner.nextLine(), "rw");
int limit = scanner.nextInt();
int number = 2;
for (int i = 0; i < limit; i++) {
ra.writeInt(number);
number += 2;
}
ra.close();
Задача:
Дано имя файла и целое число N (> 1). Создать файл целых чисел с данным именем и
записать в него N первых положительных четных чисел (2, 4, …).
Может они используют разные алгоритмы?
Бинарный файл, я имею ввиду не исполняемый файл, а файл данных. То есть, двоичные файлы
Ответы
Ответ 1
Начнем с Java - описание метода: The java.io.RandomAccessFile.writeInt(int v) method writes an int to the file as four bytes, high byte first. То есть всегда пишет в файл 4 байта старшим байтом вперед - такое представление называют BigEndian. Java - платформонезависимый язык, поэтому на любой платформе Вы получите одинаковый результат. А вот с C++ все гораздо интереснее - reinterpret_cast(&i) - преобразует int в массив из 4х байт в последовательности, которая зависит от платформы BigEndian или LittleEndian. Поэтому даже один и тот же код на разных платформах будет выдавать разный результат. (архитектура x86 имеет порядок LittleEndian)
Комментариев нет:
Отправить комментарий