Visual BasicからC#へのビット単位操作を使用して関数を変換しようとすると、結果が混在します。Visual BasicからC#へのビット単位操作の変換
本当に(視覚的に)基本的なものが欠けていると確信しています。ここで
は、元のVBのコードです:私はそれをこの配列の最初の8項養うとき
Dim CRCresult As UInt16 = 0
Dim CRC_16_POLY As UInt16 = &HA001
Private Sub CRC16(newByte As Byte)
CRCresult = CRCresult Xor newByte
For i As Integer = 0 To 7
If (CRCresult And &H1) Then
CRCresult = (CRCresult >> 1) Xor CRC_16_POLY
Else
CRCresult = (CRCresult >> 1)
End If
Next
End Sub
:
{&H47, &H41, &H50, &H53, &H41, &HC, &H0, &H1, &H0, &H0, &H0, &HFF}
を次のようにCRCresultが表示されます。以下は
12864, 49395, 31104, 40248, 9949, 23782, 35549, 39307
です私のC#への翻訳:
private UInt16 CRCresult = 0;
private UInt16 CRC_16_POLY = 0xA001;
private void CRC16(byte newByte)
{
CRCresult = (UInt16)(CRCresult^newByte);
for (int i = 0; i <= 7; i++) {
if((CRCresult & 0x1) != 0)
{
CRCresult = (UInt16)((CRCresult >> 1)^CRC_16_POLY);
} else
{
CRCresult = (UInt16)(CRCresult >> 1);
}
}
}
私はそれをこの配列の最初の8項養うとき:
{ 0x47, 0x41, 0x50, 0x53, 0x41, 0xC, 0x0, 0x1, 0x0, 0x0, 0x0, 0xFF }
を次のようにCRCresultが表示されます。要するに
12864, 49395, 31104, 40248, 57948, 15586, 18876, 29065
newBytes CRCresult
VB | C# | VB | C#
------------- ---------------
&H47 | 0x47 | 12864 | 12864
&H41 | 0x41 | 49395 | 49395
&H50 | 0x50 | 31104 | 31104
&H53 | 0x53 | 40248 | 40248
&H41 | 0x41 | 9949 | 57948
&HC | 0xC | 23782 | 15586
&H0 | 0x0 | 35549 | 18876
&H1 | 0x1 | 39307 | 29065
&H0 | 0x0 |
&H0 | 0x0 |
&H0 | 0x0 |
&HFF | 0xFF |
私は私の中で何をしないのです結果の違いを引き起こしている翻訳?
私はちょうどあなたのコードを試して、あなたのVB出力と同じ結果を得ました。ただし、あなたが最後の4を表示していないように見えるので、より多くの結果が得られます。 'CRC16'その結果を得る? – juharr
参考に、ここで私はそれをどのように呼んでいたのですか。 'foreach(新しいバイトの{0x47、0x41、0x50、0x53、0x41、0xC、0x0、0x1、0x0、0x0、0x0、0xFF}のvar b) { CRC16(b); Console.WriteLine(CRCresult); } '。 また、これはコンソールプログラム 'Main'から呼び出されていたので、変数とメソッドを静的にしました。 – juharr
'for(int k = 0; k <= message.Length - 5; k ++) { \t CRC16(message [k]); } ' ここで、messageは配列です。 – bigLarry