Файлы и биты
May. 14th, 2014 04:32 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Вопрос по программированию от неспециалиста. Вот я хочу прочитать файл в С и проинтерпретировать его весь как запись большого двоичного числа. Какие подводные камни могут быть?
Например, я открываю файл в N байт, и считываю его побайтово как символьный массив типа char длины N. Потом смотрю битовое представление каждого символа, и формирую массив из нулей и единичек длины 8*N. С которым я потом работаю, как с большим двоичным числом в 8*N разрядов. Результат алгоритма у меня условно говоря двоичное чиcло размерности 8*M. Я его делю на блоки по 8 бит, формирую обратно новый символьный массив в М байт. И записываю это все дело в файл.
Что может пойти не так?
Например, я открываю файл в N байт, и считываю его побайтово как символьный массив типа char длины N. Потом смотрю битовое представление каждого символа, и формирую массив из нулей и единичек длины 8*N. С которым я потом работаю, как с большим двоичным числом в 8*N разрядов. Результат алгоритма у меня условно говоря двоичное чиcло размерности 8*M. Я его делю на блоки по 8 бит, формирую обратно новый символьный массив в М байт. И записываю это все дело в файл.
Что может пойти не так?
no subject
Date: 2014-05-14 12:52 pm (UTC)Например, https://gmplib.org
no subject
Date: 2014-05-14 01:07 pm (UTC)Я не смотрел детально, если в том пакете есть функция которая делает за меня эту работу - то есть преобразовываем файл в число то я буду рад.
no subject
Date: 2014-05-14 01:12 pm (UTC)no subject
Date: 2014-05-14 02:41 pm (UTC)Но вот черт, мне вот похоже реально нужно именно чистый битовый массив, который я и собираюсь вертеть по разным, придуманным лично мною, алгоритмам.
no subject
Date: 2014-05-14 02:49 pm (UTC)no subject
Date: 2014-05-14 03:06 pm (UTC)no subject
Date: 2014-05-14 01:26 pm (UTC)если будете взаправду пользоваться гмп, то имеет смысл писать в файлы десятичное представление вместо собственно битиков
no subject
Date: 2014-05-14 02:21 pm (UTC)Потому то преобразование данных в эту самую двоичную строку мне нужно. Причем по большому счету достаточно любого осмысленного биективного преобразования(то есть когда по строке я могу однозначно восстановить исходные данные и наоборот).
no subject
Date: 2014-05-14 06:49 pm (UTC)впрочем раз вам важно конкретное представление в памяти, то конечно ГМП не годится
no subject
Date: 2014-05-14 01:01 pm (UTC)а про GMP вам уже написали ...
no subject
Date: 2014-05-14 01:08 pm (UTC)no subject
Date: 2014-05-14 02:42 pm (UTC)Если файл состоит из нулевых символов, то независимо от его длины он будет собой представлять для вас одно и то же двоичное число. Та же проблема если он оканчивается на нулевые символы. Вопрос - подходит ли вам это.
no subject
Date: 2014-05-14 04:23 pm (UTC)no subject
Date: 2014-05-14 07:48 pm (UTC)Бинарные форматы файлов - рудимент, оставшийся от эпохи высоких цен на память и низкого быстродействия процессоров и систем передачи данных.
К тому же текст прекрасно зипуется и раззиповывается налету. Это если число будет действительно большим.