我正在尝试使用如下的简单代码行读取布尔值:ReadBuffer(Result,1)。
阅读后,结果为真。但是
结果:=不是结果
不会'切换'值false 我这里显然是一个基本的错误。
完整代码:
TYPE
TCMemStream= class(TMemoryStream)
public
function ReadBoolean: Boolean;
end;
function TCMemStream.ReadBoolean: Boolean;
begin
ReadBuffer(Result, 1);
Result:= NOT Result; <-------- after executing this line, Result has the same value
Result:= false; <----- this works
end;
答案 0 :(得分:6)
Boolean
的有效值为0和1.如果将不同的值放入Boolean
变量,则未来的行为未定义。
您应该读入字节变量b
并将b <> 0
分配到Boolean
。或者通过将字节转换为ByteBool
来进行清理。或者,您可以选择验证从文件中读取的值,并拒绝0
和1
以外的任何内容。