我有以下两种形式的二进制字符串:
<<"5.7778345">>
或
<<"444555">>
我事先不知道它是浮点数还是整数。
我试着检查它是否是一个整数。因为它是二进制的,所以不起作用。并尝试将二进制转换为列表然后检查int或float。没那么成功。
它必须是
等功能binToNumber(Bin) ->
%%Find if int or float
Return.
任何人都知道如何做到这一点?
所有最好的
答案 0 :(得分:19)
没有快速的方法。请改用这样的东西:
bin_to_num(Bin) ->
N = binary_to_list(Bin),
case string:to_float(N) of
{error,no_float} -> list_to_integer(N);
{F,_Rest} -> F
end.
这应该将二进制文件转换为列表(字符串),然后尝试将其放入浮点数中。当无法完成时,我们返回一个整数。否则,我们保持浮动并返回。
答案 1 :(得分:12)
这是我们使用的模式:
binary_to_number(B) ->
list_to_number(binary_to_list(B)).
list_to_number(L) ->
try list_to_float(L)
catch
error:badarg ->
list_to_integer(L)
end.
答案 2 :(得分:0)
似乎不需要中间转换为列表:
-spec binary_to_number(binary()) -> float() | integer().
binary_to_number(B) ->
try binary_to_float(B)
catch
error:badarg -> binary_to_integer(B)
end.
答案 3 :(得分:-1)
binary_to_term
函数及其对应term_to_binary
可能对您有用。