C
cgs1980
Unregistered / Unconfirmed
GUEST, unregistred user!
下面的一段代码是使用 TMemoryStream 从字节数组msg中读取字节流然后进行处理,但为什么读取到 TMemoryStream中的内容与原字节数组的内容不一样呢?我反复测试过,都是这样的情况,希望大家指点一下。下面是在调试状态下,显示的参数值截图: http://medicine.implight.org/files/bytes.jpg下面是源代码:Type ByteType = Array of Byte;function StreamToByteArray(Stream: TStream): ByteArray;begin if Assigned(Stream) then begin Stream.Position:=0
// Reset stream position SetLength(result, Stream.Size)
// Allocate size Stream.Read(result[0], Stream.Size)
// Read contents of stream end else SetLength(result, 0)
// Clear resultend;procedure MyTest(msg: ByteType);var ms : TStream
i, len: Integer
byte_data:ByteType
bytes: ByteType;begin ms := TMemoryStream.Create
len := Length(msg)
//此处 msg 参数显示的数值是:(38,244,255,73,0,12,........) ms.Write(msg, len)
bytes:=StreamToByteArray(ms)
//读取到 bytes 后显示的数值是:(96,219,221,0, ........) if CompareMem(bytes, @msg, len) then //这条语句执行成功 ShowMessage('Success') else ShowMessage('Failure')
ms.Position := 0
SetLength(byte_data, 4)
byte_data[0] := msg[0]
byte_data[1] := msg[1]
byte_data[2] := msg[2]
byte_data[3] := msg[3]
//执行到这里时,byte_data显示的内容是(38,244,225,73) ms.Read(byte_data[0], 4)
//执行到这里时,byte_data显示的内容是(96,219,221,0) ShowMessage('why ?')
//为什么 MemoryStream 从字节数组中读取字节流之后,会发生这样的变化? end;
// Reset stream position SetLength(result, Stream.Size)
// Allocate size Stream.Read(result[0], Stream.Size)
// Read contents of stream end else SetLength(result, 0)
// Clear resultend;procedure MyTest(msg: ByteType);var ms : TStream
i, len: Integer
byte_data:ByteType
bytes: ByteType;begin ms := TMemoryStream.Create
len := Length(msg)
//此处 msg 参数显示的数值是:(38,244,255,73,0,12,........) ms.Write(msg, len)
bytes:=StreamToByteArray(ms)
//读取到 bytes 后显示的数值是:(96,219,221,0, ........) if CompareMem(bytes, @msg, len) then //这条语句执行成功 ShowMessage('Success') else ShowMessage('Failure')
ms.Position := 0
SetLength(byte_data, 4)
byte_data[0] := msg[0]
byte_data[1] := msg[1]
byte_data[2] := msg[2]
byte_data[3] := msg[3]
//执行到这里时,byte_data显示的内容是(38,244,225,73) ms.Read(byte_data[0], 4)
//执行到这里时,byte_data显示的内容是(96,219,221,0) ShowMessage('why ?')
//为什么 MemoryStream 从字节数组中读取字节流之后,会发生这样的变化? end;