CRC32 шестнадцатеричный в .net

Я пытаюсь найти алгоритм вычисления CRC32, который выводит данные в положительном 8-значном HEX (например, CRC winrar).

Все найденные алгоритмы возвращают положительное / отрицательное целое число, с которым я не знаю, как обращаться ...


person Teejay    schedule 27.06.2012    source источник
comment
Возможный дубликат этого вопроса, который ссылается на Этот ответ   -  person Matt Wilko    schedule 27.06.2012
comment
damieng.com/blog/2006/08/08/calculating_crc32_in_c_and_net   -  person Hiren Visavadiya    schedule 27.06.2012
comment
Уже проверял, но возвращает unsigned int32. Могу ли я преобразовать его в HEX с помощью .ToString (x16)?   -  person Teejay    schedule 27.06.2012


Ответы (1)


Готов поспорить, что все найденные вами алгоритмы CRC32 возвращают 32-битное целое число (например, int или uint). Когда вы его просматриваете, вы, вероятно, рассматриваете его как десятичное число. Под просмотром я подразумеваю форматирование целого числа в виде строки без передачи каких-либо параметров формата в _3 _ или String.Format.

Если бы вы поместили Visual Studio в шестнадцатеричное представление, вы бы получили «ожидаемый» результат. В этом случае все алгоритмы верны, однако ваше ожидание неверно!

Вместо этого используйте числовой формат, который дает желаемое строковое представление:

uint crc32 = Crc32Class.GetMeAValue(data);

// For example, we'll write base-10 and base-16 the output to the console
Console.WriteLine("dec: {0}", crc32);
Console.WriteLine("hex: {0:X8}", crc32);
person user7116    schedule 27.06.2012
comment
Просто позвольте мне понять: почему X8, а не X16? - person Teejay; 27.06.2012
comment
@Teejay: есть 4 бита в разряде с основанием 16 (шестнадцатеричный?) И 32 бита в 32-битном целом числе, поэтому: (32 / 4) == 8. - person user7116; 27.06.2012
comment
Еще раз спасибо. Итак, предполагая Int16, я должен использовать x4? - person Teejay; 27.06.2012
comment
Не было бы легче понять аргумент, определяющий основание? Что-то вроде tostring (16) - person Teejay; 27.06.2012
comment
Нет. Если у меня есть Int32 как значение soruce, toString (16) автоматически выполнит toString (x8), toString (2) автоматически выполнит toString (x32). Таким же образом, если мой источник - Int16, toString (16) выполнит toString (x4) и т. Д. - person Teejay; 27.06.2012
comment
Такой же широкий диапазон выходных данных, меньшая сложность. Между прочим, многие языки программирования поддерживают такой способ работы с базовым преобразованием. - person Teejay; 27.06.2012
comment
На самом деле X означает преобразование в HEX, а 8 - это желаемое заполнение. Пожалуйста, отредактируйте свой комментарий, чтобы не запутать других пользователей - person Teejay; 11.07.2012