Prolog 将整数转换为字节

Prolog convert integer to bytes

我正在使用 SWI prolog。我想以二进制形式将整数写入二进制文件。到目前为止,我还没有找到任何解决方案,开始感到绝望。谁能帮我解决这个问题?

好久没用SWI Prolog了

我在内置库中看不到任何可以以二进制形式写入数字的内容,但您可以尝试自己编写。

以下仅适用于从 0 到 4294967295 的数字(无符号 32 位整数),并将输出 4 个字节的数字,最低有效字节在前。

如果你运行"test",它会创建一个名为"byte.dat"的4字节文件,写入数字,然后再次读取并打印出来...

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 序言允许任意长度的数字,这可能是标准库中没有 "write number as binary" 的原因。

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