このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1349527750/617
#  環境:Windows XP(32bit)、VC++ 2005 
#   
#  ある与えられた文字列をバイナリに変換して16バイトのバイト配列に入れる 
#  与えられる文字列は、バイナリ変換した時に128bitまでに収まる数値の文字列とする 
#  という問題で困ってます 
#  例: 
#  "1234" 
#  →1234(4D2h) 
#  →00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,04h,D2h 
#   
#  で、QWORD以上は整数値にできずに困っています。 
#  "18446744073709551616" 
#  →10000000000000000h 
#  →00h,00h,00h,00h,00h,00h,00h,01h,00h,00h,00h,00h,00h,00h,00h,00h, 
#  どのように処理すればいいのでしょうか? 
# 
# 

'ある与えられた文字列をバイナリに変換して16バイトのバイト配列に入れる。与えられる文字列は、バイナリ変換した時に128bitまでに収まる数値の文字列とする'(_文字列,_バイナリー文字列) :-
        append(L,16),
        atom_number(_文字列,_整数),
        '16進数ならびに変換'(_整数,[],L1),
        '先頭から00hを埋めて16進数ならびをバイナリー文字列に変換'(L,L1,_バイナリー文字列).

'16進数ならびに変換'(0,L,L) :- !.
'16進数ならびに変換'(_整数,L1,L) :-
        M is _整数 mod 256,
        N is _整数 // 256,
        '16進数表示'(M,C),
        '16進数ならびに変換'(N,[C|L1],L).

'16進数表示'(N,C) :-
        N_1 is N // 256,
        N_2 is N mod 256,
        変換(N_1,A),
        変換(N_2,B),
        atomic_list_concat([A,B,h],C).

変換(0,'0').
変換(1,'1'),
変換(2,'2').
変換(3,'3'),
変換(4,'4').
変換(5,'5'),
変換(6,'6').
変換(7,'7'),
変換(8,'8'),
変換(9,'9'),
変換(10,'A').
変換(11,'B').
変換(12,'C').
変換(13,'D').
変換(14,'E').
変換(15,'F').

'先頭から00hを埋めて16進数ならびをバイナリー文字列に変換'(L,L1,_バイナリー文字列) :-
        append(L0,L1,L),
        all(L0,'00h'),
        atomic_list_concat(L,',',_バイナリ文字列).