по ТЗ
мне нужно сохранить массив int в файл, а после извлечь обратно из файла массив и значения поместить в новый int массив
если я записываю в файл int массив - то каждое число в фале записывается в виде 4х байт?
но ведь signed int занимает только 2а байта?
--------------
дык вот - хочу int преобразовать в char а после уже char сохранить в файл...
Другие языки программирования и технологии
C++ как переменную (signed int) разделить на старший и младший байт, а после записать в 2е другие переменные типа char?
Если Вы не работаете с 16-битным компилятором, то signed int у Вас занимает 4 байта! И похоже это так, так как в файл у Вас записывается 4 байта на каждый int. То есть Ваше утверждение о 2-х байтах неверно! Можно перед записью в файл каждой переменной массива сохранять её значение в переменной short int и уже значение этой переменной сохранять в файле!
Но лучше в программе сразу объявить массив типом short int и тогда все трудности отпадут сами собой!
Но лучше в программе сразу объявить массив типом short int и тогда все трудности отпадут сами собой!
Разбить на байты легко: двигаешь вправо на 8 бит, получается старший байт. Двигаешь сначала влево, а потом вправо на 8 бит, получается младший байт.
если вы пишите бинарный файл то да, а если в текстовый то нет там каждый символ будет 1 байт. а вообще к чему такая экономия? тем более что сигнет значит без знака
Так зачем его кушать целиком - это очень плохая идея, надо покусочкам глатать и возможно в несколько заходов
Так зачем его кушать целиком - это очень плохая идея, надо покусочкам глатать и возможно в несколько заходов
signed int занимает 4 байта, чтоб было 2 надо short int
А поделить так
lo = var & 0xFF;
hi = (var >> 8) & 0xFF;
А поделить так
lo = var & 0xFF;
hi = (var >> 8) & 0xFF;
1. размер int может колебаться от 1 байта до 4-х и более в зависимости от а) компилятора, б) косвенно - архитектуры процессора.
2. нужно определиться что всё-таки надо сохранять. Массив 4-х, 2-х или 1-байтных значений. После этого вместо int можно использовать один из типов int8_t, int16_t, int32_t и т. д.. . из stdint.h, они будут однозначно соответствовать своему заявленному размеру.
3. если нужно сохранять значения размерности более 1 байта, то так же надо учитывать, что в частности в архитектурах amd64 и ix86 используется little endian, т. е. обратный порядок следования байт в представлении целых чисел и, например, значение 255 = 0x00FF после записи в файл будет выглядеть как FF 00.
2. нужно определиться что всё-таки надо сохранять. Массив 4-х, 2-х или 1-байтных значений. После этого вместо int можно использовать один из типов int8_t, int16_t, int32_t и т. д.. . из stdint.h, они будут однозначно соответствовать своему заявленному размеру.
3. если нужно сохранять значения размерности более 1 байта, то так же надо учитывать, что в частности в архитектурах amd64 и ix86 используется little endian, т. е. обратный порядок следования байт в представлении целых чисел и, например, значение 255 = 0x00FF после записи в файл будет выглядеть как FF 00.
1. размер int может колебаться от 1 байта до 4-х и более в зависимости от а) компилятора, б) косвенно - архитектуры процессора.
2. нужно определиться что всё-таки надо сохранять. Массив 4-х, 2-х или 1-байтных значений. После этого вместо int можно использовать один из типов int8_t, int16_t, int32_t и т. д.. .из stdint.h, они будут однозначно соответствовать своему заявленному размеру.
3. если нужно сохранять значения размерности более 1 байта, то так же надо учитывать, что в частности в архитектурах amd64 и ix86 используется little endian, т. е. обратный порядок следования байт в представлении целых чисел и, например, значение 255 = 0x00FF после записи в файл будет выглядеть как FF 00.
2. нужно определиться что всё-таки надо сохранять. Массив 4-х, 2-х или 1-байтных значений. После этого вместо int можно использовать один из типов int8_t, int16_t, int32_t и т. д.. .из stdint.h, они будут однозначно соответствовать своему заявленному размеру.
3. если нужно сохранять значения размерности более 1 байта, то так же надо учитывать, что в частности в архитектурах amd64 и ix86 используется little endian, т. е. обратный порядок следования байт в представлении целых чисел и, например, значение 255 = 0x00FF после записи в файл будет выглядеть как FF 00.
Похожие вопросы
- Сравнение переменных типа char в с++
- [C/C++] Oбъявление переменной типа структуры в этой же структуре
- [c++] не работает long int переменная объявленная как long int a; занимает всего 4 байта ((( Что может быть не так?
- Паскаль. Сколько байт занимает переменная типа string[10]? 11? .
- Можно ли перегрузить opeato+ для переменных типа shot int?
- Как в C++ приравнять переменную и текст? А то такую запись нельзя. А без этого задачу не решить
- Как удалить символ из переменной типа строки в PHP?
- как считывать строку типа char до пробела C++
- Подскажите аналог erase для работы с типом char на С++
- Зачем char в паскале? Зачем используется символьный тип, Char, в паскале?