无法使用TMemoryStream读取布尔值

时间:2015-02-07 15:12:03

标签: delphi

我正在尝试使用如下的简单代码行读取布尔值: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;

1 个答案:

答案 0 :(得分:6)

Boolean的有效值为0和1.如果将不同的值放入Boolean变量,则未来的行为未定义。

您应该读入字节变量b并将b <> 0分配到Boolean。或者通过将字节转换为ByteBool来进行清理。或者,您可以选择验证从文件中读取的值,并拒绝01以外的任何内容。