急跪谢!关于一个网络协议上,数据类型使用的初学者有关问题。请高人指点一下解码,编码的有关问题

急!!!跪谢!关于一个网络协议上,数据类型使用的菜鸟问题。请高人指点一下解码,编码的问题
一个客户端,接受服务器基于TCP协议之上的一种自定义的协议应答消息。此协议是封装在TCP之上的一种自定义协议,协议格式是包头部分是4个字节的无符号整形(代表包头),包体部分先是1个字节的无符号整形(代表字符串长度)+字符串(字符串长度是前面定义的那个4个)+1个字节的无符号整形(代表字符串长度)+字符串(字符串长度是前面定义的那个4个)

问题:
1,使用哪种接收数据类型比较好?Array   of   byte?还是别的什么,有没有更方便的方式,因为如果是byte,对于无符号整形的包头,还要分别移位运算,还原成无符号的整形,感觉没有用到delphi的无符号整形这个方便的类型。
2,如果有更好的解码方式,

------解决方案--------------------
你就把包理解成一个结构题就可以了,发送的时候使用writebuffer来发送,接收的时候使用readbuffer来接收,发送和接收双方根据结构体的定义来解析数据,至于编解码根据实际需要发送方用以key加密接收方以key解密
------解决方案--------------------
楼上说的没错,先定义一种结构如:

type SendType=record
sTag:integer;//包头
.....
end;

接收端也一样是这种结构

用writebuffer()来发送,用readbuffer()接收
------解决方案--------------------
变长结构啊,不能用定长的结构体,
一般是这样定义:

type
TMyData = packed record
hdr: Cardinal;
len1: Byte;
data1: array [0..0] of Char;
len2: Byte;
data2: array [0..0] of Char;
end;

写出定义,只为了让别人明白包结构,实际用处:无

然后是组包和拆包过程:
procedure BuildPacket(Packet: TMemoryStream; hdr: Cardinal; const s1, s2: string);
var
P: PChar;
L1, L2: Byte;
begin
L1 := Length(S1) and $FF;
L2 := Length(S2) and $FF;
Packet.SetSize := SizeOf(Cardinal) + SizeOf(Byte) + L1 + SizeOf(Byte) + L2;
P := Packet.Memory;
PCardinal(P)^ := hdr; // or htonl(hdr);
Inc(P, SizeOf(Cardinal));
PByte(P)^ := L1;
Inc(P);
Move(S1[1], P^, L1);
Inc(P, L1);
PByte(P)^ := L2;
Inc(P);
Move(S2[1], P^, L2);
// OK
end;

知道组包了,拆包就简单了。懒的写了。
------解决方案--------------------
用内存拷贝在数组和整型间传值
var
a : Array of Byte;
i : DWORD;
begin
................
CopyMemory(@i,@a[0],4);

------解决方案--------------------
打包,发送,接收,加/解密

呵~~,就这些处理了。还能有什么其他的处理?

编码能力就看LZ个人能力了。


------解决方案--------------------
这样的话那就简单一点去做

包头[...]+总包数[ ]+单包长度[ ]+单包字串[...]+...

循环增加就行了。

解的话也不难。
------解决方案--------------------
哈哈,你小子还在问啊???