【发布时间】:2018-10-31 06:25:40
【问题描述】:
我想计算校验和。我对 crc 的预期答案是 0xE1 但是当我运行这段代码时,它返回 0。我没有得到任何解决方案来做到这一点。请帮我解决这个问题。 下面是我尝试过的代码。
我的视图控制器:
class ViewController: UIViewController {
var checkSum:UInt8 = 0
override func viewDidLoad() {
super.viewDidLoad()
let bytes = [0x01,0x0B,0x00,0x0B,0x03,0x07,0x12,0x0E,0x0C,0x10,0x09,0x12,0x0C,0x19,0x09,0xFF,0x14]
for item in bytes {
print(calculateCheckSum(crc: checkSum, byteValue: UInt8(item)))
}
}
func calculateCheckSum(crc:UInt8, byteValue: UInt8) -> UInt8 {
let generator = 0x1D
checkSum = crc ^ byteValue
for _ in 1...8 {
if (crc & 0x80 != 0) {
checkSum = (crc << 1) ^ UInt8(Int8(generator))
}
else {
checkSum <<= UInt8(1)
}
}
return crc
}
}
【问题讨论】:
-
如果
crc & 0x80 != 0,您的 for 循环只会运行 8 次相同的事情。crc没有改变,self.crc只是被分配了 8 次相同的值。不要将self.crc与参数名称混淆。尝试重命名其中一个并检查您的代码,看看您是否编写了您想要的内容。 -
@Dhasal 不要在
calculateCheckSum中使用变量checkSum根本。