VC源码:
if(m_Commision.GetLength() !=8){
m_Commision1.SetFocus();
return;
}
strcpy((char*)ID,_T(m_Commision));
ID[8] = 0; for(i=0;i<8;i++){
if(ID[i] >='a' && ID[i] <='f')
ID[i] -= 0x20;
if(ID[i]<'0' || (ID[i]>'9' && ID[i]<'A') || ID[i]>'F'){
m_Commision1.SetFocus();
return;
}
} for(i=0;i<8;i++){
if(ID[i] < 'A')
ID[i] -= '0';
else {
ID[i] -= 'A';
ID[i] += 0xA;
}
} for(i=0;i<4;i++)
temp[i] = ((ID[2*i] << 4) & 0xF0) + ID[2*i+1];

memcpy(ID,temp,4);

解决方案 »

  1.   

    if GetLength(M_Commision) <> 8 then
    begin
      m_Commision1.SetFocus;
      exit;
    end;
    ID :=PChar(m_Commision);
    ID[8]:= 0;
    for i := 0 to 8 do
    begin
      if (ID[i]>= 'a') and (ID[i]<='f') then
         ID[i]=ID[i]-$20;
       if (ID[i]<'0') or (ID[i]>'9') and (ID[i]<'A') or (ID[I]>'F') then
       begin
         m_Commision1.SetFocus;
         exit;
       end;
    end;
      

  2.   

    for i:= 0 to i do
    begin
      if ID[i]<'A' then
         ID[i] := ID[i]- '0'
      else
      begin
         ID[i] := ID[i] - 'A';
         ID[i] := ID[i] +$A;
      end;
    end;
    for i := 0 to 4 do
    begin
      temp[i] := ((ID[2*i]     {这句我不太记得了}
      Id := copy(temp,1,4); 
    end;
      

  3.   

    谢了!
    for(i=0;i<4;i++)
    temp[i] = ((ID[2*i] << 4) & 0xF0) + ID[2*i+1];
    此句好是:
    for i:=0 to 3 do
    temp[i] = ((ID[2*i] shl 4) + 0xF0) + ID[2*i+1];但不对,不知为什么?
      

  4.   

    楼主上面写的应该不对temp[i] = ((ID[2*i] shl 4) + 0xF0) + ID[2*i+1];但不对,不知为什么?
    改成这样试试:temp[i] = ((ID[2*i] shl 4) and $F0) + ID[2*i+1];但不对,不知为什么?
      

  5.   

    有以下几个问题:
    一:ID[i] := ID[i] - 'A';在delphi里通不过!
    二:for(i=0;i<4;i++)
    temp[i] = ((ID[2*i] << 4) & 0xF0) + ID[2*i+1];
    这句位移语句不知怎么写!
      

  6.   

    ID[i] := ID[i] - 'A'应该写成
    id[i]:=chr(ord(id[i])-$20);这样能通过编译!