1
私は16b crcを計算しなければなりません。スタックオーバー。 crc on python
それは私がデータのフォーマット
data = "01190026032700169798001100000358057900002893"
CRCをHexデータは、このです:
crc = "b83a"
このCRCがこれらの機能
unsigned short CRC(unsigned char *s, int len, unsigned
short crcval)
{
register unsigned c,q;
for (; len; len--)
{
c = *s++;
q = (crcval^c) & 017;
crcval = (crcval >> 4)^(q * 010201);
q = (crcval^(c >> 4)) & 017;
crcval = (crcval >> 4)^(q * 010201);
}
return (crcval);
}
と
uint16_t sas_crc_add_byte(uint16_t crc, uint8_t b)
{
uint16_t q = (crc^b) & 017;
crc = (crc >> 4)^(q * 010201);
q = (crc^(b >> 4)) & 017;
crc = (crc >> 4)^(q * 010201);
return crc;
}
で計算しています
OK私はそのようなことを試みます。しかし、結果は異なります。
def crc(b, seed=0):
for x in b:
q = (seed^int(x, 16)) & 0o17
seed = (seed >> 4)^(q * 0o10201)
q = (seed^(int(x, 16) >> 4)) & 0o17
seed = (seed >> 4)^(q * 0o10201)
return hex(seed)
を行って。 1つの問題は、半角数字で16進数を反復処理していることです。私は、文字列をチャンクしようとし、それを反復して、私は間違った順序で正しいバイトである "3AB8"で終わった。 – mwchase
私はこれを試しました。 そして私は同じ結果になった –
あなたはこの結果をどのように得たのですか?私は "3ab7"を得るコードは私にすべてのデータのための同じ結果を与える場合 私はちょうど反転することができます –