16#4000000在Erlang中意味着什么?

时间:2016-11-09 07:31:48

标签: erlang

我正在阅读ejabberd来源,特别是ejabberd_http.erl

在下面的代码中,

 ...
 case (State#state.sockmod):recv(State#state.socket,
                          min(Len, 16#4000000), 300000)
 of
   {ok, Data} ->
     recv_data(State, Len - byte_size(Data), <<Acc/binary, Data/binary>>);
 ...

16#4000000是什么意思?
我在Erlang shell中测试了这个。

%%erlang shell 
...

7>16#4000000.
67108864

8>is_integer(16#4000000).
true

我知道这只是一个整数值。

撰写16#4000000代替67108864是否有任何好处?

1 个答案:

答案 0 :(得分:2)

在Erlang中,#之前的数字是整数基数。在您的示例中,16#4000000表示67108864的十六进制表示形式。在其他语言中,它通常表示为0x4000000

使用十六进制表示的一个原因是因为每个数字代表4位,例如16#F16(十进制),或二进制1111。使用二进制处理时,使用base 16可以更容易地为人类读者处理和理解。