求解8位首为1的数的紧凑十六进制公式(激光起始字节校验)
匹配最高位为1的8位十六进制数的高效方法
嘿,我完全懂你的困扰!一开始只判断等于0x80确实只会匹配10000000这一个二进制数,而你需要的是所有最高位为1的8位字节——也就是从0x80(二进制10000000)到0xFF(二进制11111111)的所有值。
不用枚举每一个数,最简洁高效的方法是用按位与运算:
if ((your_byte & 0x80) == 0x80) { // 这是符合条件的起始字节 }
或者更简洁的写法(因为非零值在布尔判断中会被视为true):
if (your_byte & 0x80) { // 符合条件 }
原理解释:
0x80的二进制是10000000,当你用它和任意8位字节做按位与运算时:
- 如果原字节的最高位是1,运算结果会是
0x80(非零,判断为真) - 如果最高位是0,运算结果会是
0x00(零,判断为假)
这种方法既不用枚举所有可能的数值,又能快速完成校验,非常适合激光设备起始字节的判断场景。
内容的提问来源于stack exchange,提问作者Flouby
相关产品推荐
相关产品推荐

