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" 的原因。
希望对您有所帮助,如果有人知道更好的方法,请告诉我们!
我正在使用 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" 的原因。
希望对您有所帮助,如果有人知道更好的方法,请告诉我们!