首页
社区
课程
招聘
[求助]Delphi的编程问题!
发表于: 2005-11-15 18:11 5931

[求助]Delphi的编程问题!

2005-11-15 18:11
5931
如果在delphi里面既完成

董氏集团
(董字(B6AD)+氏字(CACF)+集字(BCAF)+团字(CDC5) )
对应的十进制相加是
46765+51919+48303+52677=199664

又完成
ynew
y(79)+n(6E)+e(65)+w(77)
对应十进制相加是
121+110+101+119

我只知道有个Ord()函数可以完成各个字节的十进制相加
但是,却无法完成字的十进制相加

大虾们帮帮忙啊!


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
2
//呵呵,采用了笨方法。该函数传入中文字符,则对中文字符相加,并返回相加的值,如果不是中文字符则返回0。
Function UnStrAdd(Str:String):LongWord;
var i,Len:Integer;
    j:Word;
begin
  ResUlt := 0;
  if Str = '' then
    Exit;
  Len := Length(Str);
  if (Len mod 2) <> 0 then
    Exit;
  For i := 1 to Len div 2 do
  begin
    j := Word(PLongWord(Str)^);
    if j <= $7F7F then
    begin
      ResUlt := 0;
      Exit;
    end;
    j := (j shl 8) + (j shr 8);
    ResUlt := ResUlt + j;
    Inc(PWord(Str),1);
  end;
end;
2005-11-16 00:38
0
雪    币: 212
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
怎么是小虾,应该是大侠吧!
的确好。
2005-11-16 12:07
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
4
最初由 小虾 发布
//呵呵,采用了笨方法。该函数传入中文字符,则对中文字符相加,并返回相加的值,如果不是中文字符则返回0。
Function UnStrAdd(Str:String):LongWord;
var i,Len:Integer;
j:Word;
begin
........

真的很感谢小虾,我问的2个问题你都有帮我解答,谢谢
2005-11-16 13:07
0
雪    币: 226
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
最初由 小虾 发布
//呵呵,采用了笨方法。该函数传入中文字符,则对中文字符相加,并返回相加的值,如果不是中文字符则返回0。
Function UnStrAdd(Str:String):LongWord;
var i,Len:Integer;
j:Word;
begin
........

小虾,可以用Unicode字符来解决这个问题吧?可是我只会说不会做,你老可不要骂我
2005-11-17 00:47
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
6
最初由 笨虫虫 发布

小虾,可以用Unicode字符来解决这个问题吧?可是我只会说不会做,你老可不要骂我

Unicdoe字符我也测试过,不过得到的结果不对,所以说采用了笨方法。
2005-11-17 09:54
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
7
最初由 小虾 发布

Unicdoe字符我也测试过,不过得到的结果不对,所以说采用了笨方法。

小虾对不起,可能我的表述误导了你
我的意思是这样的


董氏集团ynew
转化成
B6AD CACF BCAF CDC5 0079 006E 0065 0077
(为了方便你看我用空格隔开啦)

就可以啦,后面十六进制转十进制我请教了朋友知道怎么处理啦
嘿嘿`希望你不要打我~~嫌我麻烦哦~~
2005-11-17 17:18
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
8
呵,我前面写的函数应该已经可以完成你上面的要求了。如:
i := UnStrAdd('董');  //i等于B6AD。
2005-11-17 18:28
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
9
最初由 小虾 发布
呵,我前面写的函数应该已经可以完成你上面的要求了。如:
i := UnStrAdd('董'); //i等于B6AD。

您可能还没理解我的意思
您写的可以把
董氏集团转化成等到199664

但是,如果在董氏集团后面接一个英文或者是数字的话就返回0了
比如我是要得到董氏集团y转化的值
199664+121就得到不了了,用您的函数就得到0了
2005-11-17 19:00
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
10
我尝试修改您的函数想得到我的值可惜。。。。水平太差,简直是拿不出台面。。
2005-11-17 19:03
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
11
哦,明白你的意思了,无论输入什么字符,中文的字符就按中文字符相加,英文字符和数字字符就按英文字符和数字字符相加。
那你试试下面的函数。因为用了PChar参数,所以增加了一个长度参数(len参数是你要相加的字符串长度):
Function StrAdd(Str:PChar;Len:Integer):LongWord;
var i:Integer;
    j:Word;
begin
  ResUlt := 0;
  if Str[1] = #0 then
    Exit;
  i := 1;
  while i <= Len do
  begin
    j := Word(PLongWord(Str)^);
    if j <= $7F7F then
    begin
      ResUlt := ResUlt + Byte(PLongWord(Str)^);
      Inc(PByte(Str),1);
      Inc(i);
    end
    else
    begin
      j := (j shl 8) + (j shr 8);
      ResUlt := ResUlt + j;
      Inc(PWord(Str),1);
      Inc(i,2);
    end;
  end;
end;
2005-11-17 19:37
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
12
小虾
我是刚学delphi不会用Pchar参数
我是想把
董氏集团字符串赋值给Edit1.text
然后经过转换得到199785(199664+121)
然后在Edit2.text里面显示199785

我只会用string Integer float。。之间的赋值转换
这个Pchar不会,你可以教教我吗?让我好有一个突破
先谢谢了,感谢你指点我这么多
2005-11-17 21:26
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
13
这样调用就行了。
Edit2.Text := IntToStr(StrAdd(PChar(Edit1.Text),Length(Edit1.Text)));
2005-11-17 22:33
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
14
非常感谢。。。。
真是不知道怎么表达了
2005-11-17 23:59
0
游客
登录 | 注册 方可回帖
返回
//