Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 按位操作的赋值问题_C# - Fatal编程技术网

C# 按位操作的赋值问题

C# 按位操作的赋值问题,c#,C#,我正试图为我已经实现的FPGA设计编写一个C#串行接口 作为接口程序的一部分,我需要计算CRC-8校验和 我试图在一个较低的级别上做这件事(因为这是我比较熟悉的级别),但我遇到了一些问题 我遇到的问题是,诸如第91-95行上的赋值(例如第91行:TempChecksumBits[7]=ChecksumBits[6];)不仅赋值TempChecksumBits[],而且还修改了ChecksumBits[]值 有什么想法吗?非常感谢您的帮助,因为我对高级语言不太熟悉 问候,, 迈克 使用系统; 使用

我正试图为我已经实现的FPGA设计编写一个C#串行接口

作为接口程序的一部分,我需要计算CRC-8校验和

我试图在一个较低的级别上做这件事(因为这是我比较熟悉的级别),但我遇到了一些问题

我遇到的问题是,诸如第91-95行上的赋值(例如第91行:
TempChecksumBits[7]=ChecksumBits[6];
)不仅赋值
TempChecksumBits[]
,而且还修改了
ChecksumBits[]

有什么想法吗?非常感谢您的帮助,因为我对高级语言不太熟悉

问候,, 迈克

使用系统;
使用System.Collections.Generic;
使用系统集合;
使用系统组件模型;
使用系统数据;
使用系统图;
使用System.Linq;
使用系统文本;
使用System.Windows.Forms;
命名空间Windows窗体应用程序2
{
公共部分类Form1:Form
{
公共表格1()
{
初始化组件();
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
字节[]读缓冲区=新字节[20];
ReadBuffer[0]=转换为ToByte(“10000001”,2);
ReadBuffer[1]=Convert.ToByte(“00000000”,2);
ReadBuffer[2]=Convert.ToByte(“11000011”,2);
ReadBuffer[3]=Convert.ToByte(“00001111”,2);
ReadBuffer[4]=Convert.ToByte(“01010101”,2);
ReadBuffer[5]=Convert.ToByte(“00001111”,2);
ReadBuffer[6]=Convert.ToByte(“01010101”,2);
ReadBuffer[7]=Convert.ToByte(“00001111”,2);
ReadBuffer[8]=Convert.ToByte(“01010101”,2);
ReadBuffer[9]=Convert.ToByte(“00001111”,2);
ReadBuffer[10]=Convert.ToByte(“01010101”,2);
ReadBuffer[11]=Convert.ToByte(“00001111”,2);
ReadBuffer[12]=Convert.ToByte(“01010101”,2);
ReadBuffer[13]=Convert.ToByte(“00001111”,2);
ReadBuffer[14]=Convert.ToByte(“01010101”,2);
ReadBuffer[15]=Convert.ToByte(“00001111”,2);
ReadBuffer[16]=Convert.ToByte(“01010101”,2);
ReadBuffer[17]=Convert.ToByte(“00001111”,2);
ReadBuffer[18]=Convert.ToByte(“01010101”,2);
ReadBuffer[19]=Convert.ToByte(“11100111”,2);
CheckDataPacket(ReadBuffer);
}
专用void CheckDataPacket(字节[]ReadBuffer)
{
字节[]校验和=新字节[1];
校验和[0]=Convert.ToByte(“00000000”,2);
字节[]数据字节=新字节[18];
数据字节[0]=读取缓冲区[2];
数据字节[1]=读取缓冲区[3];
数据字节[2]=读取缓冲区[4];
数据字节[3]=读取缓冲区[5];
数据字节[4]=读取缓冲区[6];
数据字节[5]=读取缓冲区[7];
数据字节[6]=读缓冲区[8];
数据字节[7]=读缓冲区[9];
数据字节[8]=读缓冲区[10];
数据字节[9]=读缓冲区[11];
数据字节[10]=读缓冲区[12];
数据字节[11]=读缓冲区[13];
数据字节[12]=读缓冲区[14];
数据字节[13]=读缓冲区[15];
数据字节[14]=读缓冲区[16];
数据字节[15]=读缓冲区[17];
数据字节[16]=读缓冲区[18];
数据字节[17]=读取缓冲区[1];
CalculateChecksum(数据字节,参考校验和);
textBox1.Text=(Convert.ToString(校验和[0]);
}
私有void CalculateChecksum(字节[]数据字节,参考字节[]校验和)
{
BitArray ChecksumBits=新的位数组(校验和);
BitArray TempChecksumBits=新的位数组(校验和);
对于(int i=0;i<18;i++)
{
字节[]当前字节=新字节[1];
CurrentByte[0]=数据字节[i];
BitArray数据位=新的位数组(CurrentByte);
对于(int k=0;k<8;k++)
{
TempChecksumBits[7]=ChecksumBits[6];
TempChecksumBits[6]=ChecksumBits[5];
TempChecksumBits[5]=ChecksumBits[4];
TempChecksumBits[4]=ChecksumBits[3];
TempChecksumBits[3]=ChecksumBits[2];
如果((校验位[7])==(校验位[1]))
{
TempChecksumBits[2]=假;
}
其他的
{
TempChecksumBits[2]=真;
}
如果((校验位[7])==(校验位[0]))
{
TempChecksumBits[1]=假;
}
其他的
{
TempChecksumBits[1]=真;
}
if((数据位[7-k])==(校验位[7]))
{
TempChecksumBits[0]=false;
}
其他的
{
TempChecksumBits[0]=真;
}
ChecksumBits=TempChecksumBits;
}
}
///////////////重新格式化校验和字节/////////////////////
对于(int j=0;j<8;j++)
{
if(校验位[j]==true)
{
双值=数学功率(2,j);
校验和[0]+=(字节)(值);
}
}
}
}
}

这一行是问题所在,就在所有if/else块的末尾:

ChecksumBits = TempChecksumBits;
之后,这两个变量引用同一个
BitArray
实例。现在还不清楚你为什么要这么做,或者你想达到什么目的,但这是不可能的
ChecksumBits = TempChecksumBits;
if ((ChecksumBits[7]) == (ChecksumBits[1]))
{
    TempChecksumBits[2] = false;
}
else
{
    TempChecksumBits[2] = true;
}
TempChecksumBits[2] = ChecksumBits[7] != ChecksumBits[1];