CRC-CCITT KERMIT 16 DELPHIコードをC#に変換する
質問
私は、16進ストリングからカーミットCRC値を提供する関数に取り組んでいます。私はデルファイにコードを持っています。私は.NET開発者であり、C#のコードが必要です。
function CRC_16(cadena : string):word;
var
valuehex : word;
i: integer;
CRC : word;
Begin
CRC := 0;
for i := 1 to length(cadena) do
begin
valuehex := ((ord(cadena[i]) XOR CRC) AND $0F) * $1081;
CRC := CRC SHR 4;
CRC := CRC XOR valuehex;
valuehex := (((ord(cadena[i]) SHR 4) XOR LO(CRC)) AND $0F);
CRC := CRC SHR 4;
CRC := CRC XOR (valuehex * $1081);
end;
CRC_16 := (LO(CRC) SHL 8) OR HI(CRC);
end;
このWebページからコードを取得しました: デルフィのカーミットCRC
Delphi機能は正しいと思います。誰かがコードをC#に変換してください。私はC#に変換しようとしましたが、単語のデータ型とDelphiのLO関数で迷子になりました。皆さん、ありがとうございました。
解決
から MSDNフォーラム:
static long ComputeCRC(byte[] val)
{
long crc;
long q;
byte c;
crc = 0;
for (int i = 0; i < val.Length; i++)
{
c = val[i];
q = (crc ^ c) & 0x0f;
crc = (crc >> 4) ^ (q * 0x1081);
q = (crc ^ (c >> 4)) & 0xf;
crc = (crc >> 4) ^ (q * 0x1081);
}
return (byte)crc << 8 | (byte)(crc >> 8);
}
使用する encoding.ascii.getBytes(文字列) aを変換する string
に byte[]
.
他のヒント
単語は、16ビットの符号なし整数です(値0..65535を保存できます)。
LOは、整数の低次バイトを返します。したがって、整数が0x7b41afの場合、たとえば、LOは0xafを返します。
所属していません StackOverflow