我做的Socket api程序,客户端发送一个结构体,结构为:
TSockMsg=record //网络发送消息结构
Head:array [0..3] of char;
CH:integer; //通道
ComType:integer; //命令类型
Command:integer; //命令
Content:array [0..255] of char; //命令内容 string[255]string
end;
PTSockMsg = ^TSockMsg;
客户端发送
Head := #5#2#1#31;
CH := 1;
ComType := 2;
Command := 3;
Content := 'Hello';
发送到服务器端后,服务器使用一个260字节的缓冲区接收,接收内容为:
(#5, #2, #1, #31, #1, #0, #0, #0, #2, #0, #0, #0, #3, #0, #0, #0, 'H', 'e', 'l', 'l', 'o', #0, #0, #0, ...共260字节)
我想在服务器端转换为下面这个结构
TSockMsg=record //网络发送消息结构
CH:integer; //通道
ComType:integer; //命令类型
Command:integer; //命令
Content:string; //命令内容
end;
PTSockMsg = ^TSockMsg;
我用的方法是:(recvBuf为缓冲区接收的内容)
TempStr := copy(recvBuf,5,4);
RecvCmd.CH := PInteger(PChar(TempStr))^; //获得CH
TempStr := copy(recvBuf,9,4);
RecvCmd.ComType := PInteger(PChar(TempStr))^; //获得命令类型
TempStr := copy(recvBuf,13,4);
RecvCmd.Command := PInteger(PChar(TempStr))^; //获得命令
RecvCmd.Content := copy(recvBuf,17,length(recvBuf)-16);
昨天你告诉我的PInteger(PChar(TempStr))^ 方法 #1#0#0#0确实为 1,但在我的程序里执行总是出现一个很大的数字,请问我应该怎样处理。