Я пытаюсь преобразовать метод Objective C в Swift, но для этого мне нужна помощь в понимании происходящего.
Для контекста ввод этого метода начинается как NSString
, который затем преобразуется в объект NSData
с кодировкой utf8.Затем байты этого объекта данных передаются в метод (параметр message
).
Возвращаемое значение этого метода затем отправляется через writeData
определенной характеристике CBPeripheral
.
Вот что я понимаю (с точки зрения Swift).
- Передаваемое сообщение представляет собой
UInt8
байтовый массив: [UInt8]
- 3 переменные созданыкак
UInt32
значения;crcVal
, byteVal
и mask
crcVal
затем устанавливаются на максимальное значение UInt32
type - каждый байт из байтового массива
UInt8
, переданного в:затем проходит цикл и выполняется какая-то операция для получения и добавления к окончательному результату значения crcVal
, которое в конечном итоге используется для отправки через команду writeData
CoreBluetooth в CBPeripheral
.
Я не очень разбираюсь в побитовых операторах или в том, почему метод, описанный ниже, делает то, что делает, так как нет документации.Может кто-нибудь помочь прояснить некоторые или все части этого?Я надеюсь написать Swift эквивалентную версию этого метода.Спасибо.
- (uint32_t) computeCRC:(uint8_t *)message len:(NSUInteger)msgLen {
uint32_t crcVal = 0, byteVal, mask;
crcVal = 0xFFFFFFFF;
for (int i=0; i<msgLen; i++) {
byteVal = message[i];
crcVal ^= byteVal;
for (int j=7; j>=0; j--) {
mask = -(crcVal&1);
crcVal = (crcVal>>1)^(0xEDB88320 & mask);
}
}
return ~crcVal;
}