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);

解决方案 »

  1.   

    我将他改为了一个函数形式:要输入的参数为需要处理的字符串,即VC中的SRead
    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的!
      

  2.   

    Function RingForNokia(RingString:string):string;
    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;