Цитата:
Сообщение от going
AlexH, я так понял алгоритм расчета CRC-XMODEM
полином 8408
Вот такой у меня код получился. .NET
Скрытый текст
string inputStr = "84103305181301086B00410540A611011D00003A004F72B0AC82A1016B008242E428214380802309";
StringBuilder sb = new StringBuilder();
sb.Append(inputStr);
// Выравнивание строки
for (int i = 0; i <= 0x200; i++)
{
if (sb.Length < i)
sb.Append(" ");
}
inputStr = sb.ToString();
byte[] str = Encoding.ASCII.GetBytes(inputStr);
int result = 65535;
int length = str.Length;
int CurrentByte = 0;
int StepByte = 0;
for (int i = 0; i < length; i++)
{
CurrentByte = (int)str[i];
result ^= CurrentByte;
StepByte = result;
for (int j = 0; j < 8; j++)
{
if ((StepByte & 1) == 1)
{
result = (StepByte >> 1) & 0xFFFF;
result ^= 0x8408;
StepByte = result;
}
else
{
StepByte = (StepByte >> 1) & 0xFFFF;
result = StepByte;
}
}
}
ushort res = ((ushort)~(short)result);
Console.WriteLine("Result : {0}", res.ToString("X")); [свернуть]
|
Перебил я это в Дельфи... не получается CRC
Или код С я не правильно понял, или кормлю код неправильными строками.
Что я делаю не так?
Скрытый текст
PHP код:
VAR
CRCStr, TmpS3: string;
I2, I3, B : integer;
CRCResult : word;
BEGIN
TmpS3:= '<строка кодинга из kon>';
CRCResult:= $FFFF;
for I2 := 1 to 512 do if I2>Length(TmpS3) then TmpS3:= TmpS3+' ';
for i2:=1 to Length(TmpS3) do begin
CRCResult:=CRCResult xor (ord(TmpS3[i2]));
for b:=0 to 7 do begin
if (CRCResult and $1)<>0 then CRCResult:=(CRCResult shr 1) xor $8408
else CRCResult:=CRCResult shr 1;
end;
end;
CRCStr:= IntToHex(Hi(CRCResult),2)+IntToHex(Lo(CRCResult),2);
sListBox4.Items.Add(CRCStr);
END;
[свернуть]
Добавлено через 3 часа 46 минут
Все.. разобрался.. вопрос снят
Добавлено через 5 часов 50 минут
Начиная с версии 2.10.0.55 ETACS Decoder поддерживает чтение/изменение/запись KON-файлов для ETACS'а и для моторника. Пользуйтесь на здоровье.
Добавлено через 5 часов 52 минуты
В следующей версии будет работа с CUF-файлами...
ЗДЕСЬ