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

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

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

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

01.08.2013, 16:19. Просмотров 1088. Ответов 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++!!! Дан файл целых чисел. Создать новый файл, содержащий те же элементы, что и исходный файл, но...

19
Evg
01.08.2013, 20:51     Почему запись int в файл происходит в обратном порядке?
  #16

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
А это?
Стесняюсь спросить, от реализации ЧЕГО это зависит?

Просто человек задал конкретный вопрос, на который есть конкретный ответ, а не эфимерное "зависит от реализации"

0
Toshkarik
01.08.2013, 20:57
  #17

Не по теме:

От реализации процессора

0
Croessmah
01.08.2013, 21:11
  #18

Не по теме:

Цитата Сообщение от Evg Посмотреть сообщение
Стесняюсь спросить, от реализации ЧЕГО это зависит?
Цитата Сообщение от Evg Посмотреть сообщение
Разработчик процессора гарантирует.
Он гарантирует, а вот с точки зрения языка это будет уже зависеть от конкретной платформы.

0
Evg
01.08.2013, 22:46
  #19

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
Он гарантирует, а вот с точки зрения языка это будет уже зависеть от конкретной платформы.
У ТС'а вообще-то вполне конкретная платформа и ТС спросил, почему на его конкретной платформе имел место быть такой вот эффект

0
zer0mail
2368 / 1998 / 199
Регистрация: 03.07.2012
Сообщений: 7,186
Записей в блоге: 1
02.08.2013, 09:38 #20
Если не предпринимать специальных усилий, данные из памяти в файл пишутся в том же порядке, как они находятся в памяти. Например, есть структура:
C
1
2
3
4
5
6
7
8
9
10
11
12
struct st{
char c1='a';
char c2='b';
char m[4]={'c','d','e','f');
short int i=0x1234; // 2 байта
int n=0x12345678; // 4 байта
}
В памяти побайтно будет записано так: 
адреса -  x,x+1,x+2,...,x+11
1. 'a','b','c','d','e','f',0x34,0x12,0x78,0x56,0x34,0x12
или так:
2. 'a','b','c','d','e','f',0x12,0x34,0x12,0x34,0x56,0x78
1-й вариант для компьютеров с архитектурой типа intel x86 (ОС - Windows, например), в которых многобайтовые числа расположены в памяти так, что младшие разряды имеют меньший адрес, а старшие - больший.
2-й вариант для компьютеров с архитектурой типа Sparc (ОС -UNIX, например), в которых многобайтовые числа расположены в памяти так, что младшие разряды имеют больший адрес, а старшие - меньший.


Символ Unicode (русская 'A' - 0x0441 ) рассматривается не как массив из 2-х байтов, а как 16 (или 32) -битовое число, поэтому при записи 'A' в файл в формате UTF-16 для Windows в файл запишутся байты 0x41, 0x04 (этот формат называется UTF-16LE, те. Little Endian), а для Unix запишутся байты 0x04, 0x41 (этот формат называется UTF-16BE, те. Big Endian).

Если нужно, чтобы данные передавались в определенном порядке, не зависящем от архитектуры компьютера (например, при передаче по сети), то обеспечивать передачу/прием многобайтовых элементов "нужным концом" надо вручную (библиотеки TCP/IP делают это правильно и для Windows и для Unix).
2
02.08.2013, 09:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2013, 09:38
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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