using System;
using System.Collections.Generic;
public class Test
{
//
public static ushort CalculateCRC(List<byte> byteList)
{
ushort crc = 0x0;
for (int j = 0; j < byteList.Count; j++)
{
int c = byteList[j];
for (int i = 0; i < 8; i++)
{
bool c15 = ((crc >> 15 & 1) == 1);
bool bit = ((c >> (7 - i) & 1) == 1);
crc <<= 1;
if (c15 ^ bit)
{
crc ^= 0x1021; // 0001 0000 0010 0001 (0, 5, 12)
}
}
}
crc &= (ushort)0xFFFF;
return crc;
}
public static void Main()
{
// 00 00 00 00 00 00 00 00 00 8F 02 F1 01 F3 01 00 00
//byte[] byteList = ;
List<byte> lst = new List<byte>(new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x8F, 0x02, 0xF1, 0x01, 0xF3, 0x01, 0x00, 0x00});
Console.WriteLine(CalculateCRC(lst));
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKCnB1YmxpYyBjbGFzcyBUZXN0CnsKCS8vIAoJCglwdWJsaWMgIHN0YXRpYyAgdXNob3J0IENhbGN1bGF0ZUNSQyhMaXN0PGJ5dGU+IGJ5dGVMaXN0KQogICAgICAgIHsKCiAgICAgICAgICAgIHVzaG9ydCBjcmMgPSAweDA7CiAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgYnl0ZUxpc3QuQ291bnQ7IGorKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaW50IGMgPSBieXRlTGlzdFtqXTsKCiAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBib29sIGMxNSA9ICgoY3JjID4+IDE1ICYgMSkgPT0gMSk7CiAgICAgICAgICAgICAgICAgICAgYm9vbCBiaXQgPSAoKGMgPj4gKDcgLSBpKSAmIDEpID09IDEpOwoKICAgICAgICAgICAgICAgICAgICBjcmMgPDw9IDE7CgogICAgICAgICAgICAgICAgICAgIGlmIChjMTUgXiBiaXQpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjcmMgXj0gMHgxMDIxOyAvLyAwMDAxIDAwMDAgMDAxMCAwMDAxICAoMCwgNSwgMTIpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBjcmMgJj0gKHVzaG9ydCkweEZGRkY7CgogICAgICAgICAgICByZXR1cm4gY3JjOwogICAgICAgIH0KCQoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewoJCS8vIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDhGIDAyIEYxIDAxIEYzIDAxIDAwIDAwCgkJLy9ieXRlW10gYnl0ZUxpc3QgPSA7CglMaXN0PGJ5dGU+IGxzdCA9IG5ldyBMaXN0PGJ5dGU+KG5ldyBieXRlW10gezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4OEYsIDB4MDIsIDB4RjEsIDB4MDEsIDB4RjMsIDB4MDEsIDB4MDAsIDB4MDB9KTsKCQoJCUNvbnNvbGUuV3JpdGVMaW5lKENhbGN1bGF0ZUNSQyhsc3QpKTsKCX0KCQoJCgkKfQ==