Diskuze: Crc 16 M_o_d_b_u_s - Kde je problém?
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 3 zpráv z 3.
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
V prvním příkazu uvnitř for cyklu používáš bitový OR namísto bitového XOR a pak Ti úplně chybí výpočetní roura nad proměnnou crc.
Díky za nasměrování, už vše funguje jak má
To OR za XOR jsem si taky mohl všimnout
using System;
namespace test
{
class Program
{
const uint POLY = 0x8005;
public static uint CRC16Modbus(uint crc, byte[] data)
{
for (int i = 0; i < data.Length; i++)
{
crc ^= data[i];
for (int j = 0; j < 8; j++)
{
if ((crc & 0x0001) != 0)
{
crc >>= 1;
crc ^= POLY;
}
else
crc >>= 1;
}
}
return crc;
}
static void Main(string[] args)
{
uint crc;
byte[] buffer_bin = { 0, 0, 0, 0, 0, 6, 0, 0x64, 0, 2, 0, 0x33 };
crc = CRC16Modbus(0, buffer_bin);
string Text = "0x" + crc.ToString("X4");
Console.WriteLine(Text);
}
}
}
Zobrazeno 3 zpráv z 3.