//下面这个函数在每两个字符之间插入空格
int CSCommTestDlg::String2Hex(CString str, CByteArray &senddata)
{
int hexdata,lowhexdata;
int hexdatalen=0;
int len=str.GetLength();
senddata.SetSize(len/2);
for(int i=0;i<len;)
{
char lstr,hstr=str[i];
if(hstr==' ')
{
i++;
continue;
}
i++;
if(i>=len)
break;
lstr=str[i];
hexdata=ConvertHexChar(hstr);
lowhexdata=ConvertHexChar(lstr);
if((hexdata==16)||(lowhexdata==16))
break;
else
hexdata=hexdata*16+lowhexdata;
i++;
senddata[hexdatalen]=(char)hexdata;
hexdatalen++;
}
senddata.SetSize(hexdatalen);
return hexdatalen;
}
//把一个字符串转成相应16进制
char CSCommTestDlg::ConvertHexChar(char ch)
{
if((ch>='0')&&(ch<='9'))
return ch-0x30;
else if((ch>='A')&&(ch<='F'))
return ch-'A'+10;
else if((ch>='a')&&(ch<='f'))
return ch-'a'+10;
else
return (-1);
}
int CSCommTestDlg::String2Hex(CString str, CByteArray &senddata)
{
int hexdata,lowhexdata;
int hexdatalen=0;
int len=str.GetLength();
senddata.SetSize(len/2);
for(int i=0;i<len;)
{
char lstr,hstr=str[i];
if(hstr==' ')
{
i++;
continue;
}
i++;
if(i>=len)
break;
lstr=str[i];
hexdata=ConvertHexChar(hstr);
lowhexdata=ConvertHexChar(lstr);
if((hexdata==16)||(lowhexdata==16))
break;
else
hexdata=hexdata*16+lowhexdata;
i++;
senddata[hexdatalen]=(char)hexdata;
hexdatalen++;
}
senddata.SetSize(hexdatalen);
return hexdatalen;
}
//把一个字符串转成相应16进制
char CSCommTestDlg::ConvertHexChar(char ch)
{
if((ch>='0')&&(ch<='9'))
return ch-0x30;
else if((ch>='A')&&(ch<='F'))
return ch-'A'+10;
else if((ch>='a')&&(ch<='f'))
return ch-'a'+10;
else
return (-1);
}
用delphi改写如下:
function ConvertHexChar(ch: AnsiChar): Integer;
begin
if (ch >= '0') and (ch <= '9') then
begin
result := Ord(ch) - 48;
Exit;
end
else if (ch>='A') and (ch<='F') then
begin
result := Ord(ch) -Ord('A') + 10;
Exit;
end
else if (ch>='a') and (ch<='f') then
begin
result := Ord(ch) -Ord('a') + 10;
Exit
end
else begin
Result := -1;
Exit;
end;
end;function String2Hex(str: AnsiString; var senddata: TByteArray): integer;
var
hexdata, lowhexdata: Integer;
hexdatalen: Integer;
len: Integer;
i: Integer;
lstr, hstr: AnsiChar;
begin
hexdatalen := 0;
len := Length(str);
//senddata.SetSize(len/2);
i := 1;
while i<= len do
begin
hstr := str[i];
if hstr =' ' then
begin
Inc(i);
Continue;
end;
Inc(i);
if i > len then
begin
break;
end;
lstr := str[i];
hexdata := ConvertHexChar(hstr);
lowhexdata := ConvertHexChar(lstr); if (hexdata = 16) or (lowhexdata =16) then
begin
Break;
end
else begin
hexdata := hexdata*16 + lowhexdata;
end; Inc(i);
senddata[hexdatalen] := hexdata;
Inc(hexdatalen);
end; //senddata.SetSize(hexdatalen);
result := hexdatalen;end;