#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)
Комментариев нет:
Отправить комментарий