Мне нужно реализовать проверку ошибок для простого rnet кадра. Как я могу это реализовать?
Я просмотрел несколько документов, чтобы понять, как проверить правильность кадра rnet. Я попытался реализовать алгоритм, описанный на странице википедии (в swift 5.1):
// we run the calculation over all the frame except the CRC itself (last 4 bytes)
var crc : UInt32 = 0xFFFFFFFF
for x in 0..<(packetLength-4) {
let byte = packetBytes[x]
let nLookupIndex : UInt32 = (crc ^ byte) & 0xFF
crc = (crc >> 8) ^ crcTable[Int(nLookupIndex)]
}
// This is the end padding (adding 4 bytes with 0 at the end)
for x in 0..<4 {
let byte : UInt32 = 0
let nLookupIndex : UInt32 = (crc ^ byte) & 0xFF
crc = (crc >> 8) ^ crcTable[Int(nLookupIndex)]
}
, где crcTable выглядит так:
let crcTable = [0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, .... 0x5a05df1b, 0x2d02ef8d]
Я могу вижу, что это неправильно, потому что это не дает мне cr c, который я вижу в ethe rnet кадров. Кто-нибудь может указать на то, что я делаю неправильно?