如何将这个CRC校验从Matlab转换为c#?
我想把这个MATLAB函数转换成c# 但我的结果并不像预期的那样 MATLAB:如何将这个CRC校验从Matlab转换为c#?,c#,matlab,C#,Matlab,我想把这个MATLAB函数转换成c# 但我的结果并不像预期的那样 MATLAB: function check=CRC8(xa); % xa is array of bits to be transmitted (column vector) % Generates 8-bit CRC check with g(x) = x^8 + x^2 +x + 1 xae = [xa;0;0;0;0;0;0;0;0]; % Append 8 zeros to array containing bi
function check=CRC8(xa);
% xa is array of bits to be transmitted (column vector)
% Generates 8-bit CRC check with g(x) = x^8 + x^2 +x + 1
xae = [xa;0;0;0;0;0;0;0;0]; % Append 8 zeros to array containing bit-stream
g8x = [1;0;0;0;0;0;1;1;1] ; % Generator polynomial
xsa=xae(1:9);
for i=1:length(xa)
if xsa(1) = = g8x(1), xsa = xor(xsa,g8x); end;
xsa(1:8)=xsa(2:9);
if i<length(xa) xsa(9)=xae(i+9); end;
end;
check = xsa(1:8); % 8 bit CRC column vector
return;
功能检查=CRC8(xa);
%xa是要传输的位数组(列向量)
%生成g(x)=x^8+x^2+x+1的8位CRC校验
xae=[xa;0;0;0;0;0;0;0];%向包含位流的数组追加8个零
g8x=[1;0;0;0;0;0;1;1;1];%生成多项式
xsa=xae(1:9);
对于i=1:长度(xa)
如果xsa(1)=g8x(1),xsa=xor(xsa,g8x);结束;
xsa(1:8)=xsa(2:9);
如果我像xsa=xae(1:9)
这样的matlab范围是包含的,那么xsa
应该有九个元素,而不是八个。另外,由于您的i
已经是基于零的,我认为最后一个if应该与xa.Length-1
进行比较,并使用i+9
处的数组元素,而不是i+8
:
if (i < xa.Length - 1)
{
xsa[xsa.Length - 1] = xae[i + 9];
}
if(i
if (i < xa.Length - 1)
{
xsa[xsa.Length - 1] = xae[i + 9];
}