我正在阅读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
是否有任何好处?
答案 0 :(得分:2)
在Erlang中,#之前的数字是整数基数。在您的示例中,16#4000000
表示67108864
的十六进制表示形式。在其他语言中,它通常表示为0x4000000
。
使用十六进制表示的一个原因是因为每个数字代表4位,例如16#F
是16
(十进制),或二进制1111
。使用二进制处理时,使用base 16可以更容易地为人类读者处理和理解。