Delphi-Quellcode:
sendstring="290200";
retlen=sendstring.GetLength();
StringToCommbyte(sendstring,retlen, commsend);
fRes=WriteData(m_hCom, commsend,retlen,FALSE);
also aus 290200 wird 290200
596a7e
Code:
void CComDlg::StringToCommbyte (CString input, DWORD& length, byte* sendbytescom)
{
input.Remove((char)0x20);
length=length/2;
byte sendbytes[10000] = {0};
DWORD count=0;
BOOL firsttrail;
if (input.Mid(0,2)=="7E")
{
firsttrail=true;
}
for (DWORD count=0; count<length; count++)
{
sendbytes[count]=(byte)_strtoui64(input.Mid(count*2,2),NULL,16);
}
DWORD crc=CalcCRC16(sendbytes,length,firsttrail);
sendbytes[length]=(byte)(crc%0x100);
sendbytes[++length]=(byte)(crc/0x100);
DWORD sc=0;
for (DWORD s=0;s<length+1;s++)
{
switch ((byte)sendbytes[s])
{
case 0x7E:
if (sc!=0)
{
sendbytescom[sc]=(byte)0x7D;
sendbytescom[++sc]=(byte)0x5E;
} else
sendbytescom[sc]=sendbytes[s];
break;
case 0x7D:
sendbytescom[sc]=(byte)0x7D;
sendbytescom[++sc]=(byte)0x5D;
break;
default:
sendbytescom[sc]=sendbytes[s];
break;
}
sc++;
}
length=sc;
}
Kann mir bitte das jemand im Groben übersetzen mit dem CRC16 muss ich mich dann halt kümmern
der zuntere Teil "Switch" sollte auch kein problem sein
[edit=Phoenix]Delphi- in Code-Tags geändert. Das in den geschweiften klammern sieht sonst so nach Kommentar aus Mfg, Phoenix[/edit]