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

Ваш аккаунт

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

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

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

[C#] Неправильно (?) высчитываю CRC32

61K
05 июня 2012 года
GregRUS
9 / / 20.10.2010
Написал клиент в соответствии со спецификацией:
http://www.battleye.com/downloads/BERConProtocol.txt
Но столкнулся с проблемой при вычислении CRC32 суммы...
Поставил соответсвующий класс в C#.
Считаю что в нем ошибок нет, т.к. идентичный результат выдавал и онлайн генератор суммы (http://www.lammertbies.nl/comm/info/crc-calculation.html)

Оригинальная программа, написанная разработчиком, на выходе выдает:
42 45 12 71 89 9D FF 00 74 65 73 74 70 61 73 73
А моя:
42 45 1B DC B3 85 FF 00 74 65 73 74 70 61 73 73
Т.е. все совпадает кроме суммы.
Вычислял сумму для байта 0x00 и строки: "testpass" (00 74 65 73 74 70 61 73 73 )
Если я правильно понял написанное в спецификации (4-byte CRC32 checksum of the subsequent bytes).
277
05 июня 2012 года
arrjj
1.7K / / 26.01.2011
 
Код:
Byte[] stBytes = Encoding.ASCII.GetBytes(stMsg.Text); // получаем массив байтов из строки "testpass"
Byte[] bytes = new Byte[stBytes.Count() + 2]; // Инициализируем новый массив, в который добавим байт логина 00
bytes[0] = BEAction1; // Byte BEAction1 = 0xFF;
bytes[1] = BEAction; // Byte BEAction = 0x00;
for (int btCount = 0; btCount < stBytes.Count(); btCount++)
{
bytes[btCount+2] = stBytes[btCount];
}
Byte[] CRC = Calculate(bytes); // Получаем CRC32
40K
05 июня 2012 года
D129
228 / / 18.04.2012
Как вы целое число суммы на байты разбиваете - там смотрите.
скорее всего вы порядок записи байтов (или даже полубайтов) неправильно сделали.
Но вообще-то надо код приводить в таких случаях.
;-)
61K
05 июня 2012 года
GregRUS
9 / / 20.10.2010
Использую этот класс для генерации CRC32
http://pastebin.com/mKqxaju6

Далее получаю массив байтов из строки и добавляю в начало байт команды логина, после получаю саму сумму:

Цитата:
Byte[] stBytes = Encoding.ASCII.GetBytes(stMsg.Text); // получаем массив байтов из строки "testpass"
Byte[] bytes = new Byte[stBytes.Count() + 1]; // Инициализируем новый массив, в который добавим байт логина 00
bytes[0] = BEAction; // Byte BEAction = 00;
for (int btCount = 1; btCount < stBytes.Count(); btCount++)
{
bytes[btCount] = stBytes[btCount];
}
Byte[] CRC = Calculate(bytes); // Получаем CRC32

61K
05 июня 2012 года
GregRUS
9 / / 20.10.2010
Спасибо огромное!
Единственное добавил:
 
Код:
Array.Reverse(CRC);

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

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