-module(utTypeCast). -compile([export_all, nowarn_export_all]). toFloat(Value) when is_list(Value) -> list_to_float(Value); toFloat(Value) when is_binary(Value) -> binary_to_float(Value); toFloat(Value) when is_integer(Value) -> erlang:float(Value); toFloat(Value) when is_float(Value) -> Value. toList(undefined) -> "undefined"; toList(null) -> "null"; toList(Value) when is_tuple(Value) -> tuple_to_list(Value); toList(Value) when is_binary(Value) -> binary_to_list(Value); toList(Value) when is_bitstring(Value) -> bitstring_to_list(Value); toList(Value) when is_integer(Value) -> integer_to_list(Value); toList(Value) when is_float(Value) -> float_to_list(Value, [{decimals, 6}, compact]); toList(Value) when is_atom(Value) -> atom_to_list(Value); toList(Value) when is_list(Value) -> Value; toList([Tuple | PropList] = Value) when is_list(PropList) and is_tuple(Tuple) -> lists:map(fun({K, V}) -> {toList(K), toList(V)} end, [Value]). %% to_list(Term) when is_binary(Term) -> %% case unicode:characters_to_binary(Term, utf8, utf8) of %% Term -> %% unicode:characters_to_list(Term); %% _ -> %% binary_to_list(Term) %% end. toBinary(Value) when is_integer(Value) -> integer_to_binary(Value); toBinary(Value) when is_list(Value) -> list_to_binary(Value); toBinary(Value) when is_float(Value) -> float_to_binary(Value, [{decimals, 6}, compact]); toBinary(Value) when is_atom(Value) -> atom_to_binary(Value, utf8); toBinary(Value) when is_binary(Value) -> Value; toBinary([Tuple | PropList] = Value) when is_list(PropList) and is_tuple(Tuple) -> lists:map(fun({K, V}) -> {toBinary(K), toBinary(V)} end, Value); toBinary(Value) -> term_to_binary(Value). toInteger(undefined) -> undefined; toInteger(Value) when is_float(Value) -> trunc(Value); toInteger(Value) when is_list(Value) -> list_to_integer(Value); toInteger(Value) when is_binary(Value) -> binary_to_integer(Value); toInteger(Value) when is_tuple(Value) -> toInteger(tuple_to_list(Value)); toInteger(Value) when is_integer(Value) -> Value. dataType(Data) when is_list(Data) -> list; dataType(Data) when is_integer(Data) -> integer; dataType(Data) when is_binary(Data) -> binary; dataType(Data) when is_function(Data) -> function; dataType(Data) when is_tuple(Data) -> tuple; dataType(Data) when is_map(Data) -> map; dataType(Data) when is_atom(Data) -> atom; %%dataType(Data) when is_boolean(Data) -> boolean; dataType(Data) when is_bitstring(Data) -> bitstring; dataType(Data) when is_float(Data) -> float; dataType(Data) when is_number(Data) -> number; dataType(Data) when is_reference(Data) -> reference; dataType(Data) when is_pid(Data) -> pid; dataType(Data) when is_port(Data) -> port; dataType(_Data) -> not_know. %% Trim the binary -spec trim(Bin :: binary()) -> binary(). trim(Bin) when is_binary(Bin) -> trimHead(trimTail(Bin)). %% Trim head of binary -spec trimHead(Bin :: binary()) -> binary(). trimHead(<<>>) -> <<>>; trimHead(<> = Bin) -> case is_whitespace(C) of true -> trimHead(BinTail); false -> Bin end. %% Trim tail of binary -spec trimTail(Bin :: binary()) -> binary(). trimTail(<<>>) -> <<>>; trimTail(Bin) -> Size = byte_size(Bin) - 1, <> = Bin, case is_whitespace(C) of true -> trimTail(BinHead); false -> Bin end. %% Check if the char is a whitespace -spec is_whitespace(char()) -> true | false. is_whitespace($\s) -> true; is_whitespace($\t) -> true; is_whitespace($\n) -> true; is_whitespace($\r) -> true; is_whitespace(_) -> false. %% term序列化, term转为string term_to_string(Bin) when is_binary(Bin) -> binary_to_list(Bin); term_to_string(Term) -> case catch io_lib:format("~w", [Term]) of {'EXIT', _} -> lists:flatten(io_lib:format("~p", [Term])); GoodString -> lists:flatten(GoodString) end. %% term反序列化, string转换为term string_to_term(String) -> case erl_scan:string(String ++ ".") of {ok, Tokens, _} -> case erl_parse:parse_term(Tokens) of {ok, Term} -> Term; _Err -> String end; _Error -> undefined end. %% term序列化,term转换为string格式,e.g., [{a},1] => "[{a},1]" term_to_string1(Term) -> binary_to_list(list_to_binary(io_lib:format("~w", [Term]))). %% term序列化,term转换为bitstring格式,e.g., [{a},1] => <<"[{a},1]">> term_to_bitstring(Term) -> erlang:list_to_bitstring(io_lib:format("~w", [Term])). %% term反序列化,string转换为term,e.g., "[{a},1]" => [{a},1] string_to_term1(String) -> case String of [] -> []; _ -> case erl_scan:string(String ++ ".") of {ok, Tokens, _} -> case erl_parse:parse_term(Tokens) of {ok, Term} -> Term; _Err -> undefined end; _Error -> undefined end end. %%将列表转换为string [a,b,c] -> "a,b,c" list_to_string(List) -> case List == [] orelse List == "" of true -> ""; false -> F = fun(E) -> tool:to_list(E) ++ "," end, L1 = [F(E) || E <- List], L2 = lists:concat(L1), string:substr(L2, 1, length(L2) - 1) end. %% term反序列化,bitstring转换为term,e.g., <<"[{a},1]">> => [{a},1] bitstring_to_term(undefined) -> undefined; bitstring_to_term(BitString) -> string_to_term(tool:to_list(BitString)). termToBase64(Term) -> base64:encode(term_to_binary(Term)). base64ToTerm(Base64String) -> binary_to_term(base64:decode(Base64String)).