2015-02-11 3 views
2

Я пишу битовый поток для кодировщика base64 для этого и не могу найти способ доступа к исходным битам.Получить биты из двоичного кода

Скажет, у меня есть битовый:

0100 1101 0110 0001 0110 1110 

Представлял в элексир как:

<<77, 97, 110>> # or the string "Man" 

Мне нужно получить доступ к битовому в кусках 6 бит, чтобы закодировать его в base64. Как это можно сделать? У меня нет большого опыта работы с сырым двоичным файлом, поэтому я мог бы это сделать наивно.

ответ

5

Вы можете произвольно принимать отдельные битовые группы из двоичного файла:

iex(1)> <<a :: 6, b :: 6, c:: 6, d::6>> = <<77, 97, 110>> 

iex(2)> [a,b,c,d] 
[19, 22, 5, 46] 

Или вы можете использовать for comprehension:

iex(3)> for <<x :: 6 <- <<77, 97, 110>> >>, do: x 
[19, 22, 5, 46] 
+0

Отлично, спасибо! – greggreg

3

Так вы говорите, что ваша конечная цель состоит в том, чтобы кодировать битовую как base64 , вы можете использовать the :base64 module:

iex> :base64.encode "Man" 
"TWFu" 
+2

Или 'Base.encode64 (« Человек »)' – sasajuric

+1

Ах не знал, что один, спасибо! –