1楼是原VC代码,2楼是我改后的,但仍有问题,帮帮我啊~~~~~~改对的第一位得全分:)原VC代码:
BYTE a = 0, check1, check2;
CString sRead(_T(“2 F2 E2 C2 D4 R2 A-1 G-1 F-2 G-2 C2 A-6 A-4 C2 A-2 G-6 D1 D1 C2 D2 E2”)), sRing;
sRead.Replace(" ","");
arrayMessage.SetSize(sRead.GetLength() + 1);
strcpy((char *)arrayMessage.GetData(), sRead);
for(int i=0;i<arrayMessage.GetSize()-1;i++)
{
a = a ^ arrayMessage.GetAt(i);
}
check1 = 0x30 + (a & 0xf);
check2 = 0x30 + (a>>4 & 0xf) ;sRing.Format("L35&2 %s&&%c%c",(char *)arrayMessage.GetData(),check2,check1);
BYTE a = 0, check1, check2;
CString sRead(_T(“2 F2 E2 C2 D4 R2 A-1 G-1 F-2 G-2 C2 A-6 A-4 C2 A-2 G-6 D1 D1 C2 D2 E2”)), sRing;
sRead.Replace(" ","");
arrayMessage.SetSize(sRead.GetLength() + 1);
strcpy((char *)arrayMessage.GetData(), sRead);
for(int i=0;i<arrayMessage.GetSize()-1;i++)
{
a = a ^ arrayMessage.GetAt(i);
}
check1 = 0x30 + (a & 0xf);
check2 = 0x30 + (a>>4 & 0xf) ;sRing.Format("L35&2 %s&&%c%c",(char *)arrayMessage.GetData(),check2,check1);
Function RingForNokia(RingString:string):string;//参数为输入得到的铃声数据
var
i,strlong:integer;
strResult,x,y:byte;
arrayMessage:array of char;
begin
strResult:=Ord(RingString[1]);
RingString:=stringreplace(RingString,' ','',[rfreplaceall]);//去掉空格
strlong :=strlen(pchar(RingString));//要处理的铃声数据的长度
SetLength(arrayMessage, strlong+1);
for i:=1 to strlong do
arrayMessage[i]:=RingString[i] ;
for i:=2 to strlong-1 do
strResult:=strResult xor ord(arrayMessage[i]);//异或运算 x:=$f0 and strResult ;
y:=$f and strResult ;
x:=x shr 4;
x:=x+$30; y:=y+$30; RingString:=format('L35&&2 %s&&&&%d%d',[RingString,x,y]);
result:=RingString;
end;测试:
s:='2 F2 E2 C2 D4 R2 A-1 G-1 F-2 G-2 C2 A-6 A-4 C2 A-2 G-6 D1 D1 C2 D2 E2';
showmessage( (RingForNokia(s)));显示结果的checksum为15,应该是27的!
var check1, check2: byte; a, i: integer;
sRead: string;
begin
a := 0;
//CString sRead(_T(“2 F2 E2 C2 D4 R2 A-1 G-1 F-2 G-2 C2 A-6 A-4 C2 A-2 G-6 D1 D1 C2 D2 E2”)), sRing;
sRead := StringReplace(RingString, ' ', '', [rfreplaceall]);// setLength(Result, Length(sRead));
result := sRead;
// if (length(result) mod 2) = 1 then
// result := '0' + result;
//strcpy((char *)arrayMessage.GetData(), sRead);
for i:=1 to Length(result) do
begin
//showMessage(result[i]);
a := a xor ord(result[i]);
end;
check1 := $30 + (a and $f);
check2 := $30 + (a shr 4 and $f) ;
showMessage(chr(check2) + chr(check1));
//sRing.Format("L35&2 %s&&%c%c",(char *)arrayMessage.GetData(),check2,check1);
end;procedure TForm1.Button1Click(Sender: TObject);
begin
// RingForNokia('2 F2 E2 C2 D4 R2 A-1 G-1 F-2 G-2 C2 A-6 A-4 C2 A-2 G-6 D1 D1 C2 D2 E2');
RingForNokia('2 F2 E2 C2 D4 R2 A-1 G-1 F-2 G-2 C2 A-6 A-4 C2 A-2 G-6 D1 D1 C2 D2 E2');
end;