Как преобразовать двоичный код в base10 (десятичное) целое число в эликсире - PullRequest
0 голосов
/ 30 января 2019

Я бы хотел иметь возможность преобразовать строку эликсира (двоичную) в целое число base10.

Я смог сделать это с помощью следующего ...

<<104, 101, 108, 108, 111>> # equal to string "hello"
|> Base.encode16()
|> Integer.parse(16)

{448378203247, ""}

Выше делает то, что я после, но, немного похоже на взломать.Я хотел бы ...

  • лучше понять, что именно здесь происходит
  • знать, смогу ли я сделать это за один шаг

1 Ответ

0 голосов
/ 30 января 2019

Поскольку строки Elixir являются просто двоичными файлами, вы, вероятно, можете использовать функцию erlang :binary.decode_unsigned для преобразования двоичных цифр в целые числа

Из документации http://erlang.org/doc/man/binary.html#decode_unsigned-1

iex> :binary.decode_unsigned("hello")
448378203247

iex> :binary.encode_unsigned(448378203247)
"hello"

По сути,Значение ascii hello равно

<<104, 101, 108, 108, 111>>

при преобразовании из десятичного числа в шестнадцатеричное и может быть записано как

<<68, 65, 6C, 6C, 6F>>

или в двоичном виде как

<01101000, 01100101, 01101100, 01101100, 01101111>

, чтосерия байтов, хранящаяся как

68656C6C6F в шестнадцатеричном виде или

01101000_01100101_01101100_01101100_01101111 в двоичном

, чье десятичное значение (base-10) будет 448378203247

iex> Integer.to_string(448378203247, 16)
"68656C6C6F"

iex> Integer.to_string(448378203247, 2)
"110100001100101011011000110110001101111"
# each byte separated by _ is
# "1101000_01100101_01101100_01101100_01101111"
# missing a leading zero at the left, which doesn't change the value

edit: добавлен двоичный пример,

также, две шестнадцатеричные цифры могут использоваться для точного обозначения байта (4 бита, необходимых для кодирования 16 значений, от 0 до 15), поэтому, когда мыОбозначим в шестнадцатеричном виде, мы можем просто объединить шестнадцатеричные значения, а не тогда, когда они находятся в десятичной (base-10) нотации

С Вики для шестнадцатеричного

Шестнадцатеричные цифры широко используются разработчиками компьютерных систем и программистами, так как они обеспечивают более дружественное отношение к человеку.представление двоичных значений.Каждая шестнадцатеричная цифра представляет четыре двоичные цифры, также называемые полубайтами, которые составляют половину байта.Например, один байт может иметь значения в диапазоне от 0000 0000 до 1111 1111 в двоичной форме, что может быть более удобно представлено от 00 до FF в шестнадцатеричном формате.

...