Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Даллосовская CRC

968
11 июля 2003 года
BIGNICK
12 / / 20.08.2000
Hi!

Нужен алгоритм вычисления даллосовской CRC. Может у кого завалялся или есть реализация?

Николай.
5.1K
08 августа 2003 года
LeKross
1 / / 08.08.2003
Цитата:
Originally posted by BIGNICK
Hi!

Нужен алгоритм вычисления даллосовской CRC. Может у кого завалялся или есть реализация?

Николай.



//------------------------------------------------
byte __fastcall CRC8(int nByte, byte Bytes[])
{
byte CrcVal = 0; // Величина CRC
byte ByteVal; // Текущий байт
bool BitIn; // Текущий бит

for (int i=0; i<nByte; i++) // По всем байтам
{
ByteVal = Bytes; // Текущий байт
for (int j=0; j<8; j++) // По всем битам
{
BitIn = (ByteVal^CrcVal) & 0x01;
if (BitIn) CrcVal ^= 0x18; // XOR-маска
CrcVal >>= 1; // Сдвигаем CRC
if (BitIn) CrcVal += 0x80; // Вдвиг тек бит
ByteVal >>= 1; // Сдвиг тек байт
};
};
return CrcVal; // Возращаем CRC
}
//------------------------------------------------
WORD __fastcall CRC16(int nByte, byte Bytes[])
{
WORD CrcVal = 0; // Величина CRC
WORD ByteVal; // Текущий байт
bool BitIn; // Текущий бит

for (int i=0; i<nByte; i++) // По всем байтам
{
ByteVal = Bytes; // Текущий байт
for (int j=0; j<8; j++) // По всем битам
{
BitIn = (ByteVal^CrcVal) & 0x01;
if (BitIn) CrcVal ^= 0x4002;// XOR-маска CrcVal >>= 1; // Сдвигаем CRC
if (BitIn) CrcVal += 0x8000;// Вдвиг тек бит
ByteVal >>= 1; // Сдвиг тек байт
};
};

CrcVal = ~CrcVal; // Инвертируем CRC
return CrcVal; // Возращаем CRC
}
//------------------------------------------------

Вроде работало. А вообще по CRC можно посмотреть в любом описании 1Wire устройства (качаются с даллосовского сайта)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог