Столкнулся с проблемой, взял пример для расчета CRC16 Modbus на C# отсюда Код скомпилировал, создал юнит-тест:
[Test]
public void Crc16AnciCalculateTest()
{
Assert.AreEqual(new byte[] { 0x37, 0x4B }, Crc16AnciUtility.ComputeChecksumBytes(new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }));
}
И он не проходит. Сверял с несколькими онлайн калькуляторами, например вот такой
Ввожу в калькуляторе 123456789 и выбираю input ASCI: результат для Modbus - 0x4B37. В моем случае:
byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }
возвращает - B20E
Я подумал, что неверный пример. Взял нугет Tako.CRC, набросал консольное приложение:
static void Main(string[] args)
{
byte[] bytes = {1, 2, 3, 4, 5, 6, 7, 8, 9};
CRCManager crcManager = new CRCManager() {DataFormat = EnumOriginalDataFormat.HEX};
var provider = crcManager.CreateCRCProvider(EnumCRCProvider.CRC16Modbus);
var status = provider.GetCRC(bytes);
Console.Write("Input: ");
foreach (var b in bytes)
{
Console.Write(b + " ");
}
Console.WriteLine();
Console.WriteLine($"Output: {status.CrcHexadecimal}");
Console.ReadLine();
}
В результате получил такое же значение...
Не пойму, почему с онлайн калькуляторами значение не совпадает? Может я не правильно ввожу данные? Но я пробовал даже по одному числу или строку вводить, все равно не сходятся результаты. Кому верить? Буду рад за разъяснения и помощь, заранее благодарен!
Ой ой ой, решил проблему, все сходится. Не верно делал ввод данных. Метод принимает массив байт, я в него передавал целые числа. Если передавать Hex, то все совпадает.
byte[] bytes = {0x23, 0x25};
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Как заставить бота слышать звуки (например, выстрелы разной громкости из-за разных видов оружия), и реагировать на них, если он их слышитТак...
День добрый, реализовываю замену элемента в массиве по индексу через DGVВыглядит следующим образом (получаю значение элемента по выделенной...
Не могу отыскать компилятор в JetBrains RiderПрошу указать путь к папке в которой он находится