Prolog将整数转换为字节

时间:2015-04-20 15:42:17

标签: binary numbers prolog format

我正在使用SWI prolog。我想以二进制形式将整数写入二进制文件。到目前为止我没有找到任何解决办法,开始绝望。任何人都可以帮我解决这个问题吗?

1 个答案:

答案 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;在标准的库中。

我希望这有帮助,如果有人知道更好的方法,请告诉我们!