Rob*_*ion 4 int erlang encoding base elixir
我希望能够将长生不老药字符串(二进制)转换为base10整数。
我已经能够做到以下几点...
<<104, 101, 108, 108, 111>> # equal to string "hello"
|> Base.encode16()
|> Integer.parse(16)
{448378203247, ""}
Run Code Online (Sandbox Code Playgroud)
以上是我所追求的,但感觉有点像黑客。我想要...
由于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"
Run Code Online (Sandbox Code Playgroud)
本质上,的ascii值hello是
<<104, 101, 108, 108, 111>>
Run Code Online (Sandbox Code Playgroud)
从十进制转换为十六进制时可以写成
<<68, 65, 6C, 6C, 6F>>
Run Code Online (Sandbox Code Playgroud)
或以二进制形式
<01101000, 01100101, 01101100, 01101100, 01101111>
Run Code Online (Sandbox Code Playgroud)
这是存储为的一系列字节
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
Run Code Online (Sandbox Code Playgroud)
编辑:添加了二进制示例,
同样,两个十六进制数字可以用来完美地表示一个字节(编码16个值(从0到15)需要4位),这就是为什么当我们以十六进制表示时,我们只能将十六进制值连接起来,而不是当它们为十进制时(以10为基数的符号
十六进制数字被计算机系统设计人员和程序员广泛使用,因为它们提供了更人性化的二进制编码值表示形式。每个十六进制数字代表四个二进制数字,也称为半字节,即半字节。例如,单个字节的二进制值范围可以从0000 0000到1111 1111,可以更方便地将其表示为十六进制的00到FF。