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);
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);
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;
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;
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];但不对,不知为什么?
改成这样试试:temp[i] = ((ID[2*i] shl 4) and $F0) + ID[2*i+1];但不对,不知为什么?
一:ID[i] := ID[i] - 'A';在delphi里通不过!
二:for(i=0;i<4;i++)
temp[i] = ((ID[2*i] << 4) & 0xF0) + ID[2*i+1];
这句位移语句不知怎么写!
id[i]:=chr(ord(id[i])-$20);这样能通过编译!