Автор: Andysoft3C
Дата сообщения: 27.11.2006 07:13
Привет всем.
Подскажите как перевести такой код из Си в Delphi
const unsigned long CRC24tab[256] =
{
0x00000000, 0x00864CFB, 0x008AD50D, 0x000C99F6, 0x0093E6E1, 0x0015AA1A, 0x001933EC, 0x009F7F17, 0x00A18139, 0x0027CDC2, 0x002B5434, 0x00AD18CF, 0x003267D8, 0x00B42B23, 0x00B8B2D5, 0x003EFE2E,
...
};
Добавлено:
И вот такой код Си->Delphi если не затруднит
const unsigned short CMatrix[8] = {0xd4, 0xa9, 0x53, 0xa6, 0x4d, 0x9a, 0x35, 0x6a};
// корректирующая таблица для кода [16,8]
const unsigned char ucSyndromes[256] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
0x00, 0x00, 0x00, 0xff, 0x00, 0x10, 0xff, 0x0a,
0x00, 0x00, 0x00, 0x04, 0x00, 0x40, 0xff, 0xff,
0x00, 0xff, 0x20, 0xff, 0xff, 0xff, 0x14, 0xff,
0x00, 0x00, 0x00, 0xff, 0x00, 0x40, 0x08, 0x90,
0x00, 0x02, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x40, 0xff, 0x22, 0x40, 0x40, 0xff, 0x40,
0xff, 0x84, 0xff, 0xff, 0x28, 0x40, 0xff, 0xff,
0x00, 0x00, 0x00, 0x04, 0x00, 0x10, 0xff, 0xff,
0x00, 0x10, 0x80, 0xff, 0x10, 0x10, 0x21, 0x10,
0x00, 0x04, 0x04, 0x04, 0x01, 0xff, 0xff, 0x04,
0xff, 0xff, 0xff, 0x04, 0xff, 0x10, 0xff, 0xc0,
0x00, 0xff, 0x80, 0xff, 0xff, 0xff, 0x44, 0xff,
0x80, 0xff, 0x80, 0x80, 0xff, 0x10, 0x80, 0xff,
0xff, 0xff, 0x09, 0x04, 0xff, 0x40, 0xff, 0xff,
0x50, 0xff, 0x80, 0xff, 0xff, 0x03, 0xff, 0xff,
0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x08, 0x05,
0x00, 0x02, 0x20, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0xff, 0x20, 0x48, 0x01, 0xff, 0xff, 0xff,
0x20, 0x11, 0x20, 0x20, 0x42, 0xff, 0x20, 0xff,
0x00, 0x02, 0x08, 0xff, 0x08, 0xff, 0x08, 0x08,
0x02, 0x02, 0xff, 0x02, 0xff, 0x02, 0x08, 0x60,
0xff, 0xff, 0xff, 0xff, 0xff, 0x40, 0x08, 0xff,
0xff, 0x02, 0x20, 0xff, 0xff, 0xff, 0x81, 0xff,
0x00, 0xff, 0xff, 0x82, 0x01, 0xff, 0xff, 0xff,
0xff, 0x24, 0xff, 0xff, 0x88, 0x10, 0xff, 0xff,
0x01, 0xff, 0xff, 0x04, 0x01, 0x01, 0x01, 0x30,
0xff, 0xff, 0x20, 0xff, 0x01, 0xff, 0xff, 0xff,
0xff, 0x41, 0xff, 0xff, 0x12, 0xff, 0x08, 0xff,
0xff, 0x02, 0x80, 0x18, 0xff, 0xff, 0xff, 0xff,
0xa0, 0xff, 0xff, 0xff, 0x01, 0x0c, 0xff, 0xff,
0xff, 0xff, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff
}; // end of ucSyndromes[]
//
// синдромный декодер
// возвращаемое значение:
// - 0x8000, если ошибка обнаружена, но не может быть исправлена
// - декодированный байт - во всех остальных случаях (включая
// ложное декодирование)
//
unsigned short FecDecoder (unsigned short arg)
{
int i;
unsigned short res, sft;
res = 0;
sft = arg;
for (i = 0; i < 8; i++)
{
if (sft & 1)
{
res ^= CMatrix[i];
}
sft >>= 1;
} // end of for(i)
res ^= sft;
res = ucSyndromes[res];
if (res == 0xff)
{
arg = 0x8000;
}
else
{
arg = (arg ^ res) & 0x00ff;
}
return arg;
} // end of FecDecoder()
// end of file