在Delphi XE中读取TStream的问题

dzi*_*bul 0 delphi byte types tstream delphi-xe

在以前的Delphi版本中,代码如下:

   var InBuf: array[1..45] of Byte;

   Count := InStream.Read(InBuf, SizeOf(InBuf));
Run Code Online (Sandbox Code Playgroud)

用正确的值填充变量InBuf(每个字节都有一个值).现在在Delphi XE中,数组的每个第二个字节都是0,我想是因为Byte数据类型是Delphi XE中的Unicode性质的两倍大.但是,我的流已经生成并且需要通过这个过程,所以我需要另一种类型(可能?),如果有人遇到这个问题,那是Byte的一半大小或另一种解决方案.谢谢

Dav*_*nan 7

这里发生了什么,概率大于99%的是你从字符串变量写入了流.使用UTF-16编码的Unicode字符串每个字符有两个字节,而旧版本的Delphi使用ANSI编码,每个字符一个字节.

英文文本,当使用UTF-16编码时,您会观察到每隔一个字节为零的模式.

为了解决这个问题,您需要调查写入流的代码部分.