6

我正在使用 MemoryStream 构造一个需要发送到服务器的字节数组。我有三个问题:

1)有没有比这更好的方法来构造一个字节数组?

2)为什么这段代码在我的内存流中写入虚假代码?

var
  serial : word;
  MS : TMemoryStream;
const
  somebytes : array [0..1] of byte = ($72,$72);
...
begin
      MS := TMemoryStream.Create();
      try
      MS.Write(somebytes[0],2);
      serial := $3E6C;
      MS.Write(serial,2);
      finally
      MS.Free;
end;

使用调试器,我看到在流中添加了值 $6F32 而不是 $3E6C。

3)如果我打电话

MS.Position := 2;

然后我访问 PByte(MS.Memory)^ 为什么我得到流中的第一个字节而不是第三个?

4

1 回答 1

9

有没有比这更好的方法来构造一个字节数组?

在我看来,这是一种完全合理的方式。


我看到在流中添加了价值 $6F32 而不是 $3E6C。

再检查一遍。实际上添加了正确的值。但要小心小端数据类型的陷阱。添加到流中的 4 个字节依次为:$72、$72、$6C、$3E。


为什么我得到流中的第一个字节而不是第三个?

因为Memory属性总是指流的开始。它不考虑流的当前位置。

于 2012-05-09T11:19:38.767 回答