CRC16の計算プラグラム
- 題名: CRC16の計算プラグラム
- 著者: ウィン
- 日時: 2007/05/22 19:23:19
- ID: 19732
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: CRC16の計算プラグラム
- 著者: ウィン
- 日時: 2007/05/23 12:37:14
- ID: 19738
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: 【注意】どのように解決したのかご報告ください
- 著者: 管理人
- URL: http://dobon.net/
- 日時: 2007/05/24 3:04:35
- ID: 19742
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[4]: 【注意】どのように解決したのかご報告ください
- 著者: ウィン
- 日時: 2007/05/24 12:33:53
- ID: 19744
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[6]: 【注意】どのように解決したのかご報告ください
- 著者: ウィン
- 日時: 2007/05/24 15:45:56
- ID: 19747
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[7]: 【注意】どのように解決したのかご報告ください
- 著者: 管理人
- URL: http://dobon.net/
- 日時: 2007/05/25 3:39:38
- ID: 19749
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
お世話になっています。
CRC16の計算プログラムを海外から見つけ
実際動作を行なったら、日本などにある
フリーのCRC16計算ソフトと一致しません。
それでは、どうぞよろしくお願いします。
以下、ソースです。
using System;
public class Crc16
{
const ushort polynomial = 0xA001;
ushort[] table = new ushort[256];
public ushort ComputeChecksum(byte[] bytes)
{
ushort crc = 0;
for(int i = 0; i < bytes.Length; i++)
{
byte index = (byte)(crc ^ bytes[i]);
crc = (ushort)((crc >> 8) ^ table[index]);
}
return crc;
}
public byte[] ComputeChecksumBytes(byte[] bytes)
{
ushort crc = ComputeChecksum(bytes);
return new byte[] { (byte)(crc >> 8), (byte)(crc & 0x00ff) };
}
public Crc16()
{
ushort value;
ushort temp;
for(ushort i = 0; i < table.Length; i++)
{
value = 0;
temp = i;
for(byte j = 0; j < 8; j++)
{
if(((value ^ temp) & 0x0001) != 0)
{
value = (ushort)((value >> 1) ^ polynomial);
}
else
{
value >>= 1;
}
temp >>= 1;
}
table[i] = value;
}
}
}