Как я могу получить доступ к двоичному формату файла? - PullRequest
0 голосов
/ 22 мая 2011

Я только что закончил курс по организации компьютеров, в котором мы узнали, что все файлы и данные хранятся в виде нулей и единиц (битов).Однако мне любопытно, как программист может получить доступ к двоичному представлению файла?То есть, как я могу увидеть (или получить доступ) 0 и 1, которые представляют любой файл на моем компьютере?

Ответы [ 2 ]

1 голос
/ 22 мая 2011

Несмотря на то, что на самом базовом уровне все хранится в битах, большинство процессоров в наши дни разрешают доступ только к байтам (8-битным блокам). Однако из байта можно выяснить, является ли бит единицей или нет.

Чтобы получить значение бита в позиции pos (от младшего значащего бита, 0 до старшего значащего бита, 7) байта byte, вы можете использовать этот код (здесь, на C, но, вероятно, действует на многих языках):

// bit here is likely 32 bits, but it will only contain 0 or 1,
// based on the value of the bit at pos in byte
int bit=(byte>>pos)&1;
0 голосов
/ 22 мая 2011

Вы, конечно, можете прочитать файл символ за символом, если предположить, что Java имеет или обрабатывает символы как беззнаковые вы конвертируете байт в целое число - тогда десятичное значение каждого байта будет суммой определенногобайт.Затем вы можете изменить его базу в представимую двоичную форму:

String byte = Integer.toBinaryString(integer);

Это должно быть в пакете Java java.lang ( toBinaryString ), и вы можете выполнить цикл до конца файлас любой потоковой байтовой оболочкой, которую вы пожелаете.

РЕДАКТИРОВАТЬ :

Чтобы дать представление о вашем вопросе о том, как программисты читают двоичный формат (хотя и на низком уровне)

Я не уверен, как это сделать в Java, хотя в C вы могли бы создать структуру (контейнер переменных) и читать байты непосредственно в каждый член, вы могли бы заранее предположить структуру файла в соответствии с определенным типом файла(т.е. читать 4 байта, сделать float, прочитать n байтов как векторный массив)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...