шестнадцатеричная строка из списка целых чисел в swi-прологе - PullRequest
1 голос
/ 24 февраля 2012

интересно, есть ли где-нибудь библиотечный вызов для преобразования возвращаемого формата crypto libs sha1

15 ?- sha_hash('howdy', X , []), atom_codes(Y, X).
X = [239, 66, 186, 177, 25, 29, 162, 114, 241|...],
Y = 'ïBº±\031\\035\¢rñ95÷\214\@\036\=àÁ\032\û'.

хотите преобразовать X в формат как

"A34F890F16"

Ответы [ 2 ]

2 голосов
/ 24 февраля 2012
?- sha_hash('howdy', X , []),
 atom_codes(Y, X),
 maplist(\I^format('~16R',[I]),X).

вывод

EF42BAB1191DA272F13935F78C401E3DE0C11AFB
X = [239, 66, 186, 177, 25, 29, 162, 114, 241|...],
Y = 'ïBº±\031\\035\¢rñ95÷\214\@\036\=àÁ\032\û'.

Но, конечно, верхняя строка неоднозначна ...

В качестве альтернативы, заполнение «вручную» может быть выполнено таким образом (всего 1 код здесь)

?- phrase(xinteger(3), L, []),
   (L =[A] -> N = [48,A] ; N = L),
   format('~s',[N]).

output

03
L = [51],
A = 51,
N = [48, 51] .

xinteger // 1 требует, чтобы это включало :- [library(http/dcg_basics)].

edit : Я нашел строку спецификации дляpadding:

?- format('~`0t~16R~2|', [15]).
0F
true.

, теперь можно написать оригинальный пример

?- sha_hash('howdy', X , []),
     atom_codes(Y, X),
     maplist(\I^format('~`0t~16R~2|',[I]),X).

, и это выдает

EF42BAB1191DA272F13935F78C401E3DE0C11AFB
X = [239, 66, 186, 177, 25, 29, 162, 114, 241|...],
Y = 'ïBº±\031\\035\¢rñ95÷\214\@\036\=àÁ\032\û'.

, вывод легко может быть захвачен с помощью with_output_to

atom_to_hex(Atom, Hex) :-
    atom_codes(Atom, Codes),
    with_output_to(Hex, maplist(\I^format('~`0t~16R~2|',[I]), Codes)).

Во всех этих примерах используется library (lambda) .

0 голосов
/ 25 февраля 2012

Чак, спасибо, ваша первая версия поставила меня на правильный путь, но не работает.Для тех, кто читает вопрос, вот моя окончательная версия

asHexByte (X): - X> = 16, формат ('~ R', [X]).

asHexByte (X):- X <16, формат ('0 ~ R', [X]). </p>

% вычисляет sha1 в том же стиле, что и llSHA1String% sha1string (Atom, SHAString): - sha_hash (Atom, SHAList, []), with_output_to (коды (SHAString), список карт (asHexByte, SHAList)).

...