Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
TimeToWork
4 / 4 / 0
Регистрация: 13.04.2013
Сообщений: 25
#1

Почему запись int в файл происходит в обратном порядке? - C++

01.08.2013, 16:19. Просмотров 1039. Ответов 19
Метки нет (Все метки)

Разбирался в способе сохранения структур в файле, наткнулся на вот такой пример:

C++
1
2
3
4
5
6
7
int a = 'abcd';
 
FILE* WriteFile;
char WriteFileName[100] = "D:\\filename.txt";
WriteFile = fopen (WriteFileName,"wb");
fwrite(&a, sizeof(int), 1, WriteFile);
fclose (WriteFile);
Открываем файл, и видим так "dcba". Почему так? (с самой записью всё нормально, число можно потом считать, оно будет тем же, что и при записи).

И второй вопрос. Почему иногда int отображается 4 символа в файле (что логично, ибо sizeof(int) = 4, sizeof(char) = 1), но в то же время иногда отображается 2 символа в файле (например, при
C++
1
int a = 50; // код символа '2'
файл выглядит как "2 ".

При этом размер файла всё равно 4 байта, проблема чисто с отображением символов. Как будто довольно большое множество символов не может отобразиться в блокноте и просто пропускается + некое тоже большое множество символов не может отобразиться и заменяется пробелами. Так ли это?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.08.2013, 16:19     Почему запись int в файл происходит в обратном порядке?
Посмотрите здесь:
Почему не происходит запись в файл? C++
Операции с файлами, запись массива в файл в обратном порядке C++
C++ Найти ошибку. Запись строк в обратном порядке в другой файл
C++ Считать массив байт в переменную типа int в обратном порядке
C++ error C2664: itoa: невозможно преобразовать параметр 1 из 'int *' в 'int' + запись в файл
Запись строк в обратном порядке. C++
C++ Запись в обратном порядке элементов массива
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
13057 / 7320 / 817
Регистрация: 27.09.2012
Сообщений: 18,066
Записей в блоге: 3
Завершенные тесты: 1
01.08.2013, 16:26     Почему запись int в файл происходит в обратном порядке? #2
Цитата Сообщение от TimeToWork Посмотреть сообщение
При этом размер файла всё равно 4 байта
50 == 0x00000032 так виднее?

Цитата Сообщение от TimeToWork Посмотреть сообщение
Открываем файл, и видим так "dcba". Почему так?
Записываете побайтно, а никто Вам не гарантирует прямой порядок байт, так что это зависит от реализации
TimeToWork
4 / 4 / 0
Регистрация: 13.04.2013
Сообщений: 25
01.08.2013, 16:46  [ТС]     Почему запись int в файл происходит в обратном порядке? #3
Цитата Сообщение от Croessmah Посмотреть сообщение
50 == 0x00000032 так виднее?
Почему эти нули (точнее, символы им соответствующие) не видно в блокноте?
Croessmah
Модератор
Эксперт CЭксперт С++
13057 / 7320 / 817
Регистрация: 27.09.2012
Сообщений: 18,066
Записей в блоге: 3
Завершенные тесты: 1
01.08.2013, 16:48     Почему запись int в файл происходит в обратном порядке? #4
Цитата Сообщение от TimeToWork Посмотреть сообщение
не видно в блокноте?
у них может и не быть графического изображения.
TimeToWork
4 / 4 / 0
Регистрация: 13.04.2013
Сообщений: 25
01.08.2013, 16:55  [ТС]     Почему запись int в файл происходит в обратном порядке? #5
так то оно так, но
50 == 0x00000032

00
00
00
32
А отображаются ровно 2 символа. А на число 10 ( = 0х0000000А ) отображаются 4 символа, причём из них 2 одинаковых закарлючки + 2 пробела. Странно это как-то (
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
01.08.2013, 17:17     Почему запись int в файл происходит в обратном порядке? #6
что странного Вы попросили 4 байта записать
C++
1
sizeof(int)
чему удивлятся то?
TimeToWork
4 / 4 / 0
Регистрация: 13.04.2013
Сообщений: 25
01.08.2013, 17:40  [ТС]     Почему запись int в файл происходит в обратном порядке? #7
при записи 0x00000032 отображаются 2 символа
при записи 0х0000000А отображаются 4 символа
Цитата Сообщение от aLarman Посмотреть сообщение
что странного Вы попросили 4 байта записать
ну да, и при записи 4 байт 0х0000000А мы получили 2 символа с графическим отображением ОТОБР_1 и 2 символа с графическим отображением ОТОБР_2. Тобишь из 4 байт 2 попали в одно множество байт (для которых срабатывает отображение вида ОТОБР_1) и 2 в другое множество байт (для которых срабатывает отображение вида ОТОБР_2). Вам это не кажется странным для числа 0х0000000А ?
Croessmah
Модератор
Эксперт CЭксперт С++
13057 / 7320 / 817
Регистрация: 27.09.2012
Сообщений: 18,066
Записей в блоге: 3
Завершенные тесты: 1
01.08.2013, 17:43     Почему запись int в файл происходит в обратном порядке? #8
Цитата Сообщение от TimeToWork Посмотреть сообщение
при записи 0х0000000А отображаются 4 символа
Файл бинарный! Откройте в Hex-редакторе и посмотрите
TimeToWork
4 / 4 / 0
Регистрация: 13.04.2013
Сообщений: 25
01.08.2013, 18:02  [ТС]     Почему запись int в файл происходит в обратном порядке? #9
Цитата Сообщение от Croessmah Посмотреть сообщение
Файл бинарный!
это понятно, интересно Ваше мнение по поводу того, что написано далее в моём предыдущем посте в данной теме.
Croessmah
Модератор
Эксперт CЭксперт С++
13057 / 7320 / 817
Регистрация: 27.09.2012
Сообщений: 18,066
Записей в блоге: 3
Завершенные тесты: 1
01.08.2013, 18:07     Почему запись int в файл происходит в обратном порядке? #10
Цитата Сообщение от TimeToWork Посмотреть сообщение
что написано далее в моём предыдущем посте в данной теме.
Почему запись int в файл происходит в обратном порядке?
TimeToWork
4 / 4 / 0
Регистрация: 13.04.2013
Сообщений: 25
01.08.2013, 18:13  [ТС]     Почему запись int в файл происходит в обратном порядке? #11
Цитата Сообщение от Croessmah Посмотреть сообщение
А можете ещё, пожалуйста, выложить подобный скрин для 0х0000000А ? (число 10). Способ его отображения уж оочень странный.
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
01.08.2013, 18:13     Почему запись int в файл происходит в обратном порядке? #12
Цитата Сообщение от TimeToWork Посмотреть сообщение
Вам это не кажется странным для числа 0х0000000А ?
еще и как кажется! уж эти байты! (а говорят, бывают еще бииииты!!! сам не видел, но люди знащие утверждают, что они существуют ...)
Croessmah
Модератор
Эксперт CЭксперт С++
13057 / 7320 / 817
Регистрация: 27.09.2012
Сообщений: 18,066
Записей в блоге: 3
Завершенные тесты: 1
01.08.2013, 18:16     Почему запись int в файл происходит в обратном порядке? #13
Почему запись int в файл происходит в обратном порядке?
Evg
Эксперт CАвтор FAQ
17545 / 5783 / 370
Регистрация: 30.03.2009
Сообщений: 15,930
Записей в блоге: 26
01.08.2013, 20:36     Почему запись int в файл происходит в обратном порядке? #14
Цитата Сообщение от TimeToWork Посмотреть сообщение
Открываем файл, и видим так "dcba". Почему так?
Почитай, что такое "little endian" и "big endian". Процессор, который стоит на твоём компе имеет little enaidn, а потому у него образ всех значений в памяти развёрнутый по отношению к тому, как это привык видеть человек

Цитата Сообщение от Croessmah Посмотреть сообщение
Записываете побайтно, а никто Вам не гарантирует прямой порядок байт, так что это зависит от реализации
Тебя почяитать, так содержимое файла зависит от положения звёзд на небе. Разработчик процессора гарантирует. На любой машине little endian будет "обратная" запись. На любой машине big endian будет "прямая" запись
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2013, 20:40     Почему запись int в файл происходит в обратном порядке?
Еще ссылки по теме:
Запись двухмерного массива в обратном порядке C++
C++ Подскажите, как запись строки в обратном порядке?
Дан символьный файл f. Записать в файл g компоненты файла f в обратном порядке C++
C++ Дан символьный файл f. Записать в файл g элементы файла f в обратном порядке
C++ Написать программу-обработчик запись слов в обратном порядке

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Croessmah
01.08.2013, 20:40     Почему запись int в файл происходит в обратном порядке?
  #15

Не по теме:

Цитата Сообщение от Evg Посмотреть сообщение
Разработчик процессора гарантирует. На любой машине little endian будет "обратная" запись.
А это?
Цитата Сообщение от Croessmah Посмотреть сообщение
так что это зависит от реализации

Yandex
Объявления
01.08.2013, 20:40     Почему запись int в файл происходит в обратном порядке?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru