7 / 6 / 1
Регистрация: 29.10.2016
Сообщений: 175
|
||||||||||||||||
1 | ||||||||||||||||
Считывание из файла15.01.2020, 14:14. Показов 3044. Ответов 16
Метки нет (Все метки)
Доброго!
Есть какие-то способы считывать 2 байта из файла в бинарном режиме и помещать их в одну переменную? К примеру: в char16_t или в int_16t. А 4 байта считывать и в int или uint? Что происходит, если у меня файл на 3 байта, а я буду считывать int на 4 байта, как там избавляться от мусора из последнего байта? Пытаюсь считать int, в файле одно число: 1
Кликните здесь для просмотра всего текста
-858993615
Когда пытаюсь char16_t, файл тот же.
Кликните здесь для просмотра всего текста
52273
Придумал что-то такое:
Кликните здесь для просмотра всего текста
1╠
По сути все правильно, 1 и мусор. Вот только это лежит в массиве. 2 элемента по 8 бит. А хочется в одном элементе на 16. (да хоть на 32 в будущем)
0
|
15.01.2020, 14:14 | |
Ответы с готовыми решениями:
16
Заменить считывание с клавиатуры на считывание из файла Считывание файла в массив и запись нового файла Считывание из файла Считывание из файла |
369 / 312 / 65
Регистрация: 14.10.2014
Сообщений: 1,319
|
|
15.01.2020, 16:48 | 2 |
Battary, возможно то, что вам нужно вы найдёте здесь
Использование #pragma pack(push,1)... pack(pop)
0
|
43 / 39 / 5
Регистрация: 16.09.2019
Сообщений: 285
|
|
15.01.2020, 17:18 | 3 |
Позвольте полюбопытствовать, почему в файле оказалось 3 байта, если должно быть 4?
0
|
7 / 6 / 1
Регистрация: 29.10.2016
Сообщений: 175
|
|
15.01.2020, 17:49 [ТС] | 4 |
Ну вот так вот исторически сложилось, в файле оказалось нечетное количество байт.
0
|
Фрилансер
3709 / 2082 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
|
||||||
15.01.2020, 18:15 | 5 | |||||
Ну обнулите старший байт руками
Что-то Вы мудрите.. 52273 = 0xcc31 У Вас в файле единица в символьном виде?
0
|
7 / 6 / 1
Регистрация: 29.10.2016
Сообщений: 175
|
|
15.01.2020, 18:23 [ТС] | 6 |
0
|
Любитель чаепитий
|
||||||
15.01.2020, 18:27 | 7 | |||||
1
|
7 / 6 / 1
Регистрация: 29.10.2016
Сообщений: 175
|
|
15.01.2020, 21:27 [ТС] | 8 |
Делаю копирование файла, но не побайтово(такое условие), если, сначала у меня был файл на 51 байт, а потом станет на 52 или 54, файл будет корректно работать или побьется?
0
|
43 / 39 / 5
Регистрация: 16.09.2019
Сообщений: 285
|
|
15.01.2020, 21:37 | 9 |
Это условие можно трактовать как в текстовом режиме(!!!), тогда вообще поехать сколько там байт
Добавлено через 2 минуты Нуль это тоже данные, если есть нуль - он запишется, даже если его не было, что бы этого не было копировать надо кратными размеру файла порциями, или как я написал выше... Добавлено через 1 минуту Кста! Никто не мешает скопировать ВЕСЬ файл разом!
0
|
7 / 6 / 1
Регистрация: 29.10.2016
Сообщений: 175
|
|
15.01.2020, 21:47 [ТС] | 10 |
Мешает. Условие: копирование файла в бинарном режиме, файл не должен копироваться побайтово(т.е. нельзя считать в char/другую переменную 1 байт и передать эту переменную на запись). То есть порции минимум по 16 бит. Файл может быть абсолютно любым, (txt/exe/bat/да хоть torrent).
0
|
43 / 39 / 5
Регистрация: 16.09.2019
Сообщений: 285
|
|
15.01.2020, 23:30 | 11 |
Не по теме: Зуд в районе клоаки тебе мешает ВЕСЬ СРАЗУ В ОДНУ ПЕРЕМЕННУЮ РАЗМЕРОМ С ФАЙЛ - пойдет такая порция?
0
|
Любитель чаепитий
|
||||||
16.01.2020, 05:25 | 12 | |||||
тогда вам нужно проверить, сколько символов было извлечено на данной итерации, если вы достигли конца файла.
делается это просто:
это приводит к тому, что поток выставляет eofbit , который я проверяю в условии.после чего вызываю gcount , чтобы узнать, сколько байт было записано до того, как был выставлен eofbit .после этого я могу записать ровно столько байт, сколько считал и тогда файл не станет 52 или 54 байта.
1
|
7 / 6 / 1
Регистрация: 29.10.2016
Сообщений: 175
|
||||||
16.01.2020, 11:05 [ТС] | 13 | |||||
Провел эксперимент на txt/jpg/mp3/exe файлах.
Все были нечетного количества байт. Считывал и записывал по 16 бит в бинарном режиме. Было -> Стало txt 27 26 jpg 710697 7106976 mp3 493553 493552 exe 4126497 4126496 При это все открывается и все работает, в txt явно потерялся последний байт, пропал символ, а в других файлах все хорошо. Выходит потеря последнего байта не так страшна? Добавлено через 11 минут
Но, увы не работает. Как заставить программу прочитать последний байт и мусор потом?
0
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
||||||
16.01.2020, 11:45 | 14 | |||||
Battary,
0
|
43 / 39 / 5
Регистрация: 16.09.2019
Сообщений: 285
|
|
16.01.2020, 12:22 | 15 |
На уровне фарта, лишь.... может оказаться принципиальной...
Так а в чем проблема переноса без потерь?
0
|
7 / 6 / 1
Регистрация: 29.10.2016
Сообщений: 175
|
|
16.01.2020, 12:44 [ТС] | 16 |
Статистика, чтобы корректно велась, ещё дополнительно можно просмотреть какие комбинации char16_t встречались чаще всего. Естественно 8 бит тут никаким боком.
В идеале хотелось бы получить что-то для файлов, размер которых не кратен размеру контейнера. Допустим у нас файл 5 байт, мы переносим его блоками по 2 байта, последний блок: [последний байт][eof] Или переносим блоками по 4 байта, тогда последний блок: [последний байт][eof][eof][eof]. Т.е. просто добивать eof-ми, все-равно вся информация после eof игнорируется.
0
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
16.01.2020, 13:10 | 17 |
Символ EOF (байт со значением 0x04) в бинарном файле может быть где угодно.
Тот eof, который вам возвращает поток - это состояние потока, а не конкретный символ из файла.
0
|
16.01.2020, 13:10 | |
16.01.2020, 13:10 | |
Помогаю со студенческими работами здесь
17
Считывание с файла Считывание из файла Считывание из файла Считывание из файла Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |