Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];

Вниз

Проше переведите на Pascal ! Очень надо.   Найти похожие ветки 

 
Tretjakov_Oleg   (2005-01-16 01:27) [0]

int CRCTAB_16[]={
   0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7,
   0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF,
   0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6,
   0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE,
   0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485,
   0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D,
   0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4,
   0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC,
   0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823,
   0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B,
   0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12,
   0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A,
   0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41,
   0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49,
   0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70,
   0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78,
   0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F,
   0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067,
   0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E,
   0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256,
   0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D,
   0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
   0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C,
   0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634,
   0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB,
   0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3,
   0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A,
   0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92,
   0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9,
   0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1,
   0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8,
   0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0
};

DWORD calcCRC16(DWORD PrevSumm, BYTE *tmparr, UINT len)
{
 for (int i=0;i<len;i++)
   PrevSumm=(CRCTAB_16[(PrevSumm>>8)&0xFF] ^ PrevSumm<<8 ^ tmparr[i])&0xFFFF;
 return PrevSumm;
}

Пример текста программы расчета контрольного числа строки (на языке программиро-вания – Си):

DWORD calcCRC16(DWORD iPrevSumm, BYTE *btArr, UINT iLen)
{
 for (int i=0;i<iLen;i++)
   iPrevSumm=(CRCTAB_16[(iPrevSumm>>8)&0xFF] ^ iPrevSumm<<8 ^ btArr[i])&0xFFFF;
 return iPrevSumm;
}

Пример текста программы расчета контрольного числа строки (на языке программиро-вания – Visual Basic):

Private Function calcCRC16(ByVal iPrevSumm As Long, ByRef btArr() As Byte, ByVal iLen As Long) As Long
   Dim i As Long

   For i = 0 To iLen
       iPrevSumm = CLng(CRCTAB_16((((iPrevSumm \ 256)) And &HFF)) Xor ((iPrevSumm And &HFF) * 256) Xor (btArr(i))) And &HFFFF
   Next i
   calcCRC16 = iPrevSumm
End Function

Параметры:
IprevSumm - предыдущая сумма. При начальном вызове должна быть равна 0.
btArr() – байтовый входной массив, контрольное число которого надо получить
iLen – длина вышеуказанного байтового массива.


 
KSergey ©   (2005-01-16 10:59) [1]

Что-нибудь вроде такого:

var CRCTAB_16: array [0..посчитать] of Integer = (
  $0000, $1021, $2042, $3063, ... ну ит.д.
  ... $0ED1, $1EF0
);

DWORD calcCRC16(DWORD PrevSumm, BYTE *tmparr, UINT len)
{
for (int i=0;i<len;i++)
  PrevSumm=(CRCTAB_16[(PrevSumm>>8)&0xFF] ^ PrevSumm<<8 ^ tmparr[i])&0xFFFF;
return PrevSumm;
}

type PByte = ^BYTE;

function calcCRC16(PrevSumm: DWORD; tmparr: PByte; len: UINT): DWORD
var
 i: Integer;
begin
for i:=0 to len-1 do
  PrevSumm := (CRCTAB_16[(PrevSumm shr 8) AND $FF] XOR (PrevSumm shl 8) XOR (tmparr+i)^) AND $FFFF;
Result := PrevSumm;
end;

Можно описать tmparr как динамический массив, передаваемую по ссылке (var tmparr)

Проверять лень, надеюсь - тонкости доработаете



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.038 c
3-1104093610
Константинов
2004-12-26 23:40
2005.01.30
Как сменить пароль ( Vfster Password ) таблицы Paradox?


1-1105369784
Sicilla
2005-01-10 18:09
2005.01.30
TListView


3-1104240289
}|{yk
2004-12-28 16:24
2005.01.30
Firebird и захват сервером 99% CPU


3-1103862206
Nexel
2004-12-24 07:23
2005.01.30
Ну вот и грабли с IBX


1-1105787946
Ilya___
2005-01-15 14:19
2005.01.30
ошибка: Invalid variant operation





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский