преобразуйте в шестнадцатеричную систему к 64 Десятичным числам Со знаком

Я также использую Fortran (Modern) с Sublime Text (сейчас я использую версию 3), и была небольшая проблема с обработкой комментариев. Посмотрите на этот пример:

Как видите, вторая строка начинается с восклицательного знака, но она не распознается. Но если я начну первую строку с «!» (Включая пробел), то все будет работать:

Если я поставлю тире после! второй строки, он преобразует его в комментарий, но проблема переходит к третьей строке:

Я не понимаю язык файла синтаксиса , но я посмотрел на пакет MinimalFortran , чтобы исправить это (этот пакет отлично работает и может быть установлен с помощью Package Control, но он пропускает много синтаксисов). Я просто изменил

!-

на

[!]

в файле «Fortran - Modern.tmLanguage», и все это заработало:

5
задан Abhimanyu 8 June 2009 в 14:13
поделиться

2 ответа

Чтобы преобразовать целое число в шестнадцатеричную строку, просто используйте 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.
11
ответ дан 13 December 2019 в 19:34
поделиться

What about this approach?

hex2int(L) ->
   << I:64/signed-integer >> = hex_to_bin(L),
   I.

int2hex(I) -> [ i2h(X) || <<X:4>> <= <<I:64/signed-integer>> ].

hex_to_bin(L) -> << <<(h2i(X)):4>> || X<-L >>.

h2i(X) ->
    case X band 64 of
        64 -> X band 7 + 9;
        _  -> X band 15
    end.

i2h(X) when X > 9 -> $a + X - 10;
i2h(X) -> $0 + X.
0
ответ дан 13 December 2019 в 19:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: