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

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

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

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

01.08.2013, 16:19. Просмотров 1062. Ответов 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 байта, проблема чисто с отображением символов. Как будто довольно большое множество символов не может отобразиться в блокноте и просто пропускается + некое тоже большое множество символов не может отобразиться и заменяется пробелами. Так ли это?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.08.2013, 16:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему запись int в файл происходит в обратном порядке? (C++):

Почему не происходит запись в файл? - C++
#include<iostream> #include<fstream> #include <string> using namespace std; int main() { string temp; string...

Операции с файлами, запись массива в файл в обратном порядке - C++
Собственно сабж! задача. Компоненты типизированного файла - целые числа. поменять местами первый компонент с последним, второй - с...

Найти ошибку. Запись строк в обратном порядке в другой файл - C++
Надо, чтобы с файла читались строки в обратном порядке в другой файл! #include <stdio.h> #include <sys/types.h> /* mode_t */ #include...

Считать массив байт в переменную типа int в обратном порядке - C++
Есть массив байт: char byData = {0x87, 0xd6, 0x12, 0x00}; Нужно считать его в переменную типа int в обратном порядке, т.е. должно...

error C2664: itoa: невозможно преобразовать параметр 1 из 'int *' в 'int' + запись в файл - C++
Подскажите пожалуйста как быть... в конструктор приходит *int и мне нужно создать файл, с именем таким же, что и значение, которое приходит...

Дан файл целых чисел. Создать новый файл, содержащий те же элементы, что и исходный файл, но в обратном порядке - C++
Пожалуйста, помогите решить задачу в C++!!! Дан файл целых чисел. Создать новый файл, содержащий те же элементы, что и исходный файл, но...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Croessmah
Эксперт CЭксперт С++
13226 / 7498 / 845
Регистрация: 27.09.2012
Сообщений: 18,416
Записей в блоге: 3
Завершенные тесты: 1
01.08.2013, 16:26 #2
Цитата Сообщение от TimeToWork Посмотреть сообщение
При этом размер файла всё равно 4 байта
50 == 0x00000032 так виднее?

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

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

Цитата Сообщение от Croessmah Посмотреть сообщение
Записываете побайтно, а никто Вам не гарантирует прямой порядок байт, так что это зависит от реализации
Тебя почяитать, так содержимое файла зависит от положения звёзд на небе. Разработчик процессора гарантирует. На любой машине little endian будет "обратная" запись. На любой машине big endian будет "прямая" запись
0
Croessmah
01.08.2013, 20:40     Почему запись int в файл происходит в обратном порядке?
  #15

Не по теме:

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2013, 20:40
Привет! Вот еще темы с ответами:

Запись строк в обратном порядке. - C++
Нужно сделать так, что-бы из файла N считывались строки и сохранялись в другой Файл в обратном порядке. Исключая любой символ который...

Запись в обратном порядке элементов массива - C++
Дан массив целых чисел А (20). Записать в обратном порядке элементы массива с индексами с пятого по пятнадцатый. #include <stdio.h> ...

Запись двухмерного массива в обратном порядке - C++
Сообственно нужно записать массив в обратном порядке. Все перелазил к сожалению ничего рабочего не нашел, так что прошу помощи. ;C int...

Подскажите, как запись строки в обратном порядке? - C++
Подскажите запись строки в обратном порядке.


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

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

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