wzwgp 发表于 2006-8-6 16:46:44

菜鸟学习delphi遇到问题,向高人求助。(已由黑夜版主解决)

请教高人有关输出位数的问题。

请教高人:

1. edit1 输入机器码:94473715811
2. 与固定字符串(dflk5632129T.cOm)连接
3. 取出连接后的偶数位
4. 偶数位字符串再连接在(2)字符串的尾部
5. (4)连接后的字符串是40位
6. (4)连接后的字符串逐位与($0D, $01, $14, $05,$02)逐位xor运算
  结果应该是40位

问题:
edit2 输出的位数是机器码位数,不是40位。
下面是我写的代码,请高人指点那写错了。

谢谢!


function DoubleStr(s: string): string;    //连接字符串后取出偶数位字符后再连接
var
   str1,str2,str3:string;
   i: Integer;
   begin
   If Length(s) =0 Then MessageBox(0, '请输入机器码', '提示',MB_OK + MB_ICONWARNING)
   else
   str1:='dflk5632129T.cOm';
   str2:=concat(s,str1);
   s:= '' ;
   for i := 2 to Length(Str2) do
   if i mod 2 = 0 then
   s:= s + Str2;
   str3 := concat(str2,s);
   end;

functionOpeateStr(const str3 :string): string;    //字符逐位 xor   运算
const
snLen = 5 ;
sn:array of Integer =($0D, $01, $14, $05,$02);
var
i,n: integer;
a:string;
begin
   setLength(a,Length(str3));
   for i :=1 to Length(str3) do
   begin
   n := i mod snLen ;
   if n = 0 then
   n := 5 ;
   a := char(ord(str3) xor sn);
   Result := a;
   end;
   end;

procedure TForm1.Button1Click(Sender: TObject);
begin
edit2.text:= OpeateStr(edit1.text);

end;

[ 本帖最后由 wzwgp 于 2006-8-8 10:20 编辑 ]

秋风下的落叶 发表于 2006-8-7 22:30:10

黑夜彩虹 发表于 2006-8-8 08:41:13

计算到第4步,结果为:dflk5632129T.cOm47751dl5319.O    (29位,非40位)

最后结果等于:igxn7;2&404U:fM`5#27<ex01<8:J

不知道对不对?

[ 本帖最后由 黑夜彩虹 于 2006-8-8 08:47 编辑 ]

wzwgp 发表于 2006-8-8 10:18:47

原帖由 黑夜彩虹 于 2006-8-8 08:41 发表
计算到第4步,结果为:dflk5632129T.cOm47751dl5319.O    (29位,非40位)

最后结果等于:igxn7;2&404U:fM`5#27<ex01<8:J

不知道对不对?

不是的。/:?

hnxyy 发表于 2006-8-26 14:30:55

程序写的有点问题

结果是:45 21:0!=3<erii87'73?8@+aBl 2580pi7>0-+M

该了一下,不知道对不对



function DoubleStr(s: string): string;    //连接字符串后取出偶数位字符后再连接
var
str1,str2,str3:string;
i: Integer;
begin
If Length(s) =0 Then MessageBox(0, '请输入机器码', '提示',MB_OK + MB_ICONWARNING)
else str1:='dflk5632129T.cOm';
str2:=concat(s,str1);
s:= '' ;
for i := 2 to Length(Str2) do
if i mod 2 = 0 then s:= s + Str2;
str3 := concat(str2,s);
result :=str3;
end;

functionOpeateStr(const str3 :string): string;    //字符逐位 xor   运算
const
snLen = 5 ;
sn:array of Integer =($0D, $01, $14, $05, $02);
var
i,n: integer;
a:string;
begin
setLength(a,Length(str3));
for i :=1 to Length(str3) do
begin
    n := i mod snLen ;
    if n = 0 then n := 5 ;
    a := char(ord(str3) xor sn);
end;
Result := a;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
edit2.Text :=OpeateStr(DoubleStr(trim(edit1.Text)));
end;

[ 本帖最后由 hnxyy 于 2006-8-26 14:33 编辑 ]

黑夜彩虹 发表于 2006-8-26 14:44:59

H哥也来了。。。

hnxyy 发表于 2006-8-26 14:46:31

/:D黑版以后多多提携啊~~~~

黑夜彩虹 发表于 2006-8-26 14:51:42

H哥谦虚了不是~~,互相学习...
页: [1]
查看完整版本: 菜鸟学习delphi遇到问题,向高人求助。(已由黑夜版主解决)