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.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
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.
 
				