将unsigned char拆分为两个等长部分所需的位移位操作实现方法
不能直接把原有代码里的32替换为8,具体实现逻辑和代码如下:
核心逻辑说明
unsigned char 是8位长度的无符号整型,拆分为两个等长部分时,每部分占4位,对应提取高4位、低4位即可。
原有拆分64位unsigned long的逻辑是取前32位和后32位,如果你直接套用逻辑把32改成8,会出现两个问题:
- 8位长度的unsigned char和掩码
0xff00做与运算,结果直接为0 - 对8位数据右移8位,结果也会变成0,完全不符合拆分预期
正确实现代码
unsigned char my_char = 0x5E; // 提取高4位:先和0xF0(二进制11110000)做与运算保留高4位,再右移4位得到有效值 unsigned char first_half = (my_char & 0xF0) >> 4; // 提取低4位:直接和0x0F(二进制00001111)做与运算即可 unsigned char second_half = my_char & 0x0F;
结果校验
你的示例值0x5E对应二进制为01011110,运行上述代码可得:
- 高4位first_half值为0x5(十进制5,二进制
0101) - 低4位second_half值为0xE(十进制14,二进制
1110)
完全符合拆分需求。
内容的提问来源于stack exchange,提问作者Azeem Lodhi
相关产品推荐
相关产品推荐

