bool is_byte_odd_parity(uint8_t byte) {
bool parity = false;
while (byte) {
parity = !parity;
byte &= byte - 1; // 清除最低位的1
}
return parity;
}
uint32_t get_data_parity(uint8_t* src, uint32_t lenInBytes) {
bool isDataOddParity = false;
while (lenInBytes--) {
isDataOddParity ^= is_byte_odd_parity(*src++);
}
return !isDataOddParity; // 返回奇校验位
}
|