我用delphi的TServerSocket的sendbuf向手持机发送数据,要求以以下格式组织:
A5C3 LEN SEQ RAW DATA A599
Flag(2byte) Length(3 byte) Sequence(12byte) Data Flag(2byte)
举例:
给模块输入:A5 C3 00 00 00 00 41 42 43 44 A5 99
则接受端收到:ABCD
注释:0123456789ABCDEF对应的16进制30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46假如我发送ABCD到手持机,则需要将A5 C3 00 00 00 00 41 42 43 44 A5 99组织成一个数组,
我想可以是byte类型或char(也可能是其他)。但我不知道怎么进行组织,帮帮我吧,急啊!
A5C3 LEN SEQ RAW DATA A599
Flag(2byte) Length(3 byte) Sequence(12byte) Data Flag(2byte)
举例:
给模块输入:A5 C3 00 00 00 00 41 42 43 44 A5 99
则接受端收到:ABCD
注释:0123456789ABCDEF对应的16进制30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46假如我发送ABCD到手持机,则需要将A5 C3 00 00 00 00 41 42 43 44 A5 99组织成一个数组,
我想可以是byte类型或char(也可能是其他)。但我不知道怎么进行组织,帮帮我吧,急啊!
解决方案 »
- WebBrowser中弹出confirm窗口的确定事件
- 請教各位關於money類型在delphi???
- 请教问题:菜单如果动态调用外部程序.(自认为有点难度的问题)
- 怎样列举BDE中的所有数据源?
- 这个问题有点难,关于如何选择性更新。
- 请问大家的供销存软件做了多长时间?买价多少?
- 我知道一个treeview的text,我如何得到text对应的treenode?
- 如果只用一个Query,不用Database,怎样去掉那个数据库密码保护框呢?
- 请问高手用什么方法操纵文本文件?
- Delphi5.5能否在windows2000和windows NT下用,用它编的网络数据库能否在windows2000Server 和 Windows NT Server下应用
- 关于键盘消息模拟的问题
- DBGRID,我希望将后面一笔记录上移下移,怎么做?? 急。。。。。。
sendbuf:array of byte;
setlength(sendbuf,12);
sendbuf[0]:=$a5;
sendbuf[1]:=$c3;
sendbuf[2]:=$0;
sendbuf[3]:=$0;
sendbuf[4]:=$0;
sendbuf[5]:=$0;
sendbuf[6]:=$41;
sendbuf[7]:=$42;
sendbuf[8]:=$43;
sendbuf[9]:=$44;
sendbuf[10]:=$a5;
sendbuf[11]:=$99;
这是最笨的办法了。你所讲的数据组织的特点并不明显。如果有明显的规律,可以自己做个函数或是方法什么的就行了。A5C3 LEN SEQ RAW DATA A599
Flag(2byte) Length(3 byte) Sequence(12byte) Data Flag(2byte)
这是你的指令协议吧。
你可以做一个指令生成的方法啊。
比如,做一个全局的发送缓存区;
var
sendbuffer:array of char;procedure GetSendCmd(const Senddata:string);//---将数据按字符串格式传入
var
cmdlen,index:integer;
tempstr:string;
begin
cmdlen:=length(Senddata)+17;
setlength(sendbuffer,cmdlen);
zeromemory(sendbuffer,cmdlen);
//---指令头与控制字
sendbuffer[0]:=char($a5);
sendbuffer[1]:=char($c3);
tempstr:=inttohex(cmdlen,3);//--不明白你的指令怎么只有三个字节呢?一般地应为双字节数啊。
//--写Sequence的东西,自己写,我也不明白你要写什么东西。:)
//--写数据内容:
for index:=17 to cmdlen-3 do
sendbufer[index]:=senddata[18-index]; //--指令尾写入
sendbuffer[cmdlen-2]:=char($a5);
sendbuffer[cmdlen-1]:=char($99);end;
sendbuffer:array of char;procedure GetSendCmd(const Senddata:string);//---将数据按字符串格式传入
var
cmdlen,index:integer;
tempstr:string;
begin
cmdlen:=length(Senddata)+17;
setlength(sendbuffer,cmdlen);
zeromemory(sendbuffer,cmdlen);
//---指令头与控制字
sendbuffer[0]:=char($a5);
sendbuffer[1]:=char($c3);
tempstr:=format('%.3d',[cmdlen]);//--不明白你的指令怎么只有三个字节呢?一般地应为双字节数啊。
//--写入指令长度的数据,你自己根据上面的内容来写吧。
//--写Sequence的东西,自己写,我也不明白你要写什么东西。:)
//--写数据内容:
for index:=1 to cmdlen do
sendbufer[16+index]:=senddata[index];//---呵~~,这是个BUG。自己更正下。:) //--指令尾写入
sendbuffer[cmdlen-2]:=char($a5);
sendbuffer[cmdlen-1]:=char($99);end;
var
data: array of byte;
str: string;
i: integer;
begin
SetLength(data, length(Edit1.Text));
str := Edit1.Text;
for i := 1 to Length(str) do
begin
data[i-1] :=StrToInt(IntToHex(ord(str[i]),2));//这里不支持汉字,能找到更好的转换函数就好了
end;
比如:“中”字,它的GB码就是:0xD6D0
用上面的方法取就是正确的。