Чтобы преобразовать целое число в шестнадцатеричную строку, просто используйте erlang:integer_to_list(Int, 16).
Чтобы преобразовать обратно, используйте erlang:list_to_integer(List, 16).
Я полагаю, что эти функции принимают значение от 2 до 36.
Если вы хотите преобразовать двоичные файлы в и из шестнадцатеричных строк, вы можете использовать списочные выражения, чтобы сделать его более аккуратным:
bin_to_hex(Bin) -> [ hd(erlang:integer_to_list(I, 16)) || << I:4 >> <= Bin ].
hex_to_bin(Str) -> << << (erlang:list_to_integer([H], 16)):4 >> || H <- Str >>.
Чтобы преобразовать целое число в шестнадцатеричную строку, содержащую 64-разрядное целое число со знаком, теперь вы можете сделать:
Int = 1 bsl 48, HexStr = bin_to_hex(<<Int:64/signed-integer>>),
Bin = hex_to_bin(HexStr), <<RoundTrippedInt:64/signed-integer>> = Bin,
Int =:= RoundTrippedInt.