两个问题 急!!!(10分)

  • 主题发起人 主题发起人 king_213
  • 开始时间 开始时间
K

king_213

Unregistered / Unconfirmed
GUEST, unregistred user!
问题一: 二进制转换为字母或数字是不是用 Char()?
Edit1.text:=Char($13);为什么edit里什么也不显示??
问题二:Str:='0E42504F584B2B417A0F3A0E5623565D53500F33360E365656583B750F202F200E4E64342853500F32370E365656583B750F2F200E30323B5533323A7E53500F33360E365656583B750F202F200E3A2A352653500F32340E365656583B750F202F200E307C4D3753500F32360E365656583B750F202F200E4E643A3A53500F'我想将'0F'后的字符每两个结为一组 并将其转换为数值 而将'0E'后的字符每4个结成一组 也转换为数值 请问该如何写这个循环 最好用一个函数完成!!!('0E'和'0F'的位置不固定 也没有什么规律)
 
1,char($13)是回车,char函数用于将ascii码值转化为字符,ord用于将字符转化为ascii码值
2,设定转化数值的函数请自己搞定;然后:

procedure TForm1.Button2Click(Sender: TObject);
const iStepOE=4;
iStepOF=2;
var i,iStep:Integer;
BeginTransfer:Boolean;
S,Str:String;
SL_1:TStringList;//0E后的数值
SL_2:TStringList;//0F后的数值
begin
SL_1:=TStringList.Create;
SL_2:=TStringList.Create;
BeginTransfer:=False;
Str:='0E42504F584B2B417A0F3A0E5623565D53500F33360E365656583B750F202F200E4E64342853500F32370E365656583B750F2F200E30323B5533323A7E53500F33360E365656583B750F202F200E3A2A352653500F32340E365656583B750F202F200E307C4D3753500F32360E365656583B750F202F200E4E643A3A53500F';
while Str<>'' do begin
if BeginTransfer=False then begin
S:=Copy(Str,1,2);
if S='0E' then begin
BeginTransfer:=True;
iStep:=iStepOE;
end else if S='0F' then begin
BeginTransfer:=True;
iStep:=iStepOF;
end;
Str:=Copy(Str,3,Length(Str));
end else begin
S:=Copy(Str,1,2);
if S='0E' then begin
BeginTransfer:=True;
iStep:=iStepOE;
Str:=Copy(Str,3,Length(Str));
Continue;
end else if S='0F' then begin
BeginTransfer:=True;
iStep:=iStepOF;
Str:=Copy(Str,3,Length(Str));
Continue;
end;
if Length(Str)<iStep then Break;
if iStep=iStepOE then SL_1.Add(Copy(Str,1,iStep))
else SL_2.Add(Copy(Str,1,iStep));
Str:=Copy(Str,iStep+1,Length(Str));
end;
end;
showmessage(SL_1.CommaText);
showmessage(SL_2.CommaText);
end;
 
能写的简单点吗??我看不懂呀!!!
 
一开始BeginTransfer为False,基本上你的数据为两位移动,其实;
if BeginTransfer=False then begin
S:=Copy(Str,1,2); //判断是否可以开始了
if S='0E' then begin
BeginTransfer:=True;//开始
iStep:=iStepOE;//取4位
Str:=Copy(Str,3,Length(Str));//右移两位
end else if S='0F' then begin
BeginTransfer:=True;//开始
iStep:=iStepOF;//取2位
Str:=Copy(Str,3,Length(Str));//右移两位
end else begin
Str:=Copy(Str,2,Length(Str));//否则右移一位
end;
end else begin
S:=Copy(Str,1,2);//为了保证正确,再次做一个判断
if S='0E' then begin
BeginTransfer:=True;
iStep:=iStepOE;
Str:=Copy(Str,3,Length(Str));
Continue;//下面的语句不执行,继续循环
end else if S='0F' then begin
BeginTransfer:=True;
iStep:=iStepOF;
Str:=Copy(Str,3,Length(Str));
Continue;//下面的语句不执行,继续循环
end;
if Length(Str)<iStep then Break;//位数不够4位(OE)或者2位(OF)
if iStep=iStepOE then SL_1.Add(Copy(Str,1,iStep))//加入到属于OE的队列
else SL_2.Add(Copy(Str,1,iStep));//加入到属于OF的队列
Str:=Copy(Str,iStep+1,Length(Str));//右移,继续
end;
 
后退
顶部