我正在使用SWI prolog。我想以二进制形式将整数写入二进制文件。到目前为止我没有找到任何解决办法,开始绝望。任何人都可以帮我解决这个问题吗?
答案 0 :(得分:1)
自从我使用SWI Prolog以来已经有一段时间了。
我无法看到任何可以在内置库中以二进制形式编写数字的内容,但您可以尝试编写自己的数字。
以下仅适用于0到4294967295(无符号32位int)的数字,并将输出4字节的数字,最低有效字节数。
如果您运行&#34; test&#34;,它将创建一个名为&#34; byte.dat&#34;的4字节文件,写入该号码,然后再次读取并打印出来...... < / p>
doWrite(FileName, Number) :-
open(FileName, write, O, [all(true), encoding(octet)]),
writeInt32(O, Number),
close(O).
doRead(FileName, Number) :-
open(FileName, read, I, [all(true), encoding(octet)]),
readInt32(I, Number),
close(I).
writeInt32(OS, Number) :-
B0 is Number /\ 255,
B1 is (Number >> 8) /\ 255,
B2 is (Number >> 16) /\ 255,
B3 is (Number >> 24) /\ 255,
put_byte(OS, B0),
put_byte(OS, B1),
put_byte(OS, B2),
put_byte(OS, B3).
readInt32(IS, Number) :-
get_byte(IS, B0),
get_byte(IS, B1),
get_byte(IS, B2),
get_byte(IS, B3),
Number is B0 + B1<<8 + B2<<16 + B3<<24.
test :-
doWrite('byte.dat', 3287465),
doRead('byte.dat', X),
write(X).
SWI prolog允许任意长度数字,这可能是为什么没有&#34;写入数字为二进制&#34;在标准的库中。
我希望这有帮助,如果有人知道更好的方法,请告诉我们!