如何将AnsiStr转换为Bytes,反之亦然



希望有人能帮我解决这个问题-我必须从如下指定的接口读取数据:

<每条消息由一个2字节的长度(按网络字节顺序(和后面的数据字节组成。msg系列的结束由一条空消息(长度为0(表示>

使用TDataPortTCP,我可以用Dataport.Peek(大小(读取缓冲区,并用Dataport.Lull(大小(从缓冲区中提取数据-这两种方法都提供了AnsiStr 的结果

我想这样的东西应该可以工作,但我不知道如何将AnsiStr转换为Bytes,反之亦然:

while DataPortTCP.Peek(2) > ZeroBytes do
begin
LengthInBytes := DataPortTCP.Pull(2) ;
sContent := DataPortTCP.Pull(LengthInByte) ;
end;

如何声明/get/convert ZeroBytes和LengthInBytes,以及如何处理Endianess?

不幸的是,我对TBytes一无所知,到目前为止我读到的内容只会导致更多的困惑;-(

如果有人能为我指明正确的方向,我将不胜感激。

要检查字符串是否为空,可以与''进行比较。

要从字符串中检索字节值,可以访问该字符并应用ord函数。

网络顺序是大端序,意味着第一个字节的顺序更高。因此,您需要使用shl将其向左移动。在这种情况下,有两个字节,因此第一个字节被移位8位,相当于将其乘以256。

var
LengthInBytesStr: String;
LengthInBytes: Word;
begin
...
while DataPortTCP.Peek(2) <> '' do
begin
LengthInBytesStr := DataPortTCP.Pull(2);
LengthInBytes := (ord(LengthInBytesStr[1]) shl 8)
+ ord(LengthInBytesStr[2]);
sContent := DataPortTCP.Pull(LengthInByte);
end;