这里有人能帮我理解一下,我是如何在收到的字符串上应用CRC16的吗?你知道吗
stream = [0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0]
rest = [1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1]
我收到了APRS的消息。我也直接用mutlimon解码了它,得到了与我自己的PYTHON代码相同的ascii消息。 在stream变量中是删除位填充之后和反转每个字节的位序列之前收到的消息。你知道吗
到目前为止,我尝试的是在它上面应用x^16+x^12+x^5+1
,但没有成功。我想得到和你在垃圾箱里看到的一样的“休息”。其余部分也在流中,但是为了更好的可读性,我把它放到了另一个变量中。剩下的部分只是复制出来的,所以顺序是一样的。你知道吗
那么,在我的思路中,哪里我错了?
坦白地说,我想请你一步一步地告诉我,因为我需要“看看”它是如何工作的,以便更好地理解它。那对我真的很有帮助。你知道吗
所以首先要开始:
stream = [0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1,
。。。你知道吗
现在,我将按照0x11021的相反方向划分流
0,1,1,0,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,...
1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1
0,0,1,0,0,0,1,1,0,1,0,0,0,0,0,1,0,1
这是正确的开始吗?或者我必须先反转流中的每一组字节吗?你知道吗
先谢谢你
安德烈亚斯
这个问题与这个有关,但具体来说是围绕crc16。。。 How to decode Bell 202 signal? (APRS data from International Space Station)
在Greg Cook's catalog中有十一个CRC-16使用这个多项式,可能还有更多的不在他的目录中。所以当你说“CRC-16”时,可能会有很多不同的东西。你知道吗
二进制数据可以用两种不同的方式解释为字节,一种是最高有效位优先,另一种是最低有效位优先。如果是前者,那么“rest”中的CRC就是CRC-16/GENIBUS。如果是后者,则是X-25 CRC-16。你知道吗
在这两种情况下,CRC寄存器都用所有的1(
0xffff
)初始化,并在最后反转,即用0xffff
进行异或运算。在复制CRC的尝试中,您可能缺少初始化和后处理。你知道吗下面是一些简单的X-25 CRC-16 C代码,它将在假设最低有效位优先的情况下对数据进行操作:
所以如果你喂它
0x86 0xa2
。。。0x47
,您将得到0xec3f
作为CRC。你知道吗相关问题 更多 >
编程相关推荐