| imho.ws |
![]() |
|
|
|
# 1 |
|
Junior Member
Регистрация: 02.11.2003
Адрес: г. Таганрог
Сообщения: 63
![]() |
Как записать в файл 12 битные данные?
Всем привет!
Никогда ранее не сталкивался с такой проблемой, как запись в файл 12 битных (или других нестандартных данных) данных. Использую контейнер bitset<12>, но его размер...4 байта... Да и вобще при использовании функции fread и fwrite размер принимается в виде целочисленных аргументов, а у мне получается необходимо 1,5 байта на данное... Буду очень благодарен за помощь!
__________________
Америка, Америка - это красиво, но Россия вот где есть СИЛА!!! |
|
|
|
|
# 7 |
|
Junior Member
Регистрация: 21.04.2005
Сообщения: 117
![]() |
sflash
Да, конечно, и быстрее, и проще, но весь прикол 12-битных данных в том, что они пишутся ПО ПОРЯДКУ, как и любые другие. А если оставлять 4 бита незанятыми (предположим, старшие), то это просто числа от 0 до 4095 в 16-ричном формате. Пример - номера кластеров в FAT12/FAT16. В FAT12 номер кластера - 12-битный и его без масок и/или сдвигов просто не прочитать, ну и, соответственно, не записать. И хотя процедура получения 12-битного числа таким образом (сдвиги и т.д.) намного ниже, чем прямое чтение 2 байт, с этим приходится считаться и читать/писать именно по 12 бит, не пропуская 4 бита после каждого числа
|
|
|
|
|
# 8 | |
|
Full Member
Регистрация: 11.12.2002
Сообщения: 864
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
ktulu сказали же пиши 16 бит, а не 2 по 8. Тогда у тебя может быть записано число в диапозоне 0-65535, из которых верхние 4 бита всегда будут нулями.
Цитата:
|
|
|
|
|
|
# 9 | |
|
Junior Member
Регистрация: 21.04.2005
Сообщения: 117
![]() |
Мне-то все понятно, я объясняю по поводу того, почему нельзя
Цитата:
|
|
|
|
|
|
# 10 |
|
Junior Member
Регистрация: 19.04.2002
Адрес: Дом
Пол: Male
Сообщения: 187
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
А про упаковку перед записью кто-нибудь слышал? Типа объединения 2-х 12-битных блоков в 3 байта? Да и писать/читать лучше не по 1-2 байта за раз а пакетами по килобайту и т.п. Вот это действительно увеличит скорость. (реальное чтение/запись происходит покластерно, а то и большими кусками) Разбирать чего там начиталось в памяти будет на несколько порядков быстрее чем читать мелкими кусками.
В конце-концев вокруг этого всего можно (и нужно) написать прозрачную обертку, которая на верхнем уровне будет оперирровать 12-битными данными а вниху как угодно.
__________________
Дураки не динозавры - они не вымрут... |
|
|