如何在C++字符数组中用0xF填充半字节并修改ecgi[2]为0x0F?
用0xF填充C++字符数组半字节的方法,以及修改指定字节值的解决方案
一、通用:给半字节填充0xF的两种场景
半字节就是4位,分为高4位和低4位,填充0xF的操作很直观:
- 填充低4位为0xF:
要是想直接把低4位全置1(不管原有值),用位或操作即可:
要是想保留高4位不变,仅把低4位替换为0xF:byte_val |= 0x0F;byte_val = (byte_val & 0xF0) | 0x0F; - 填充高4位为0xF:
快速置位用位或:
保留低4位,覆盖高4位为0xF:byte_val |= 0xF0;byte_val = (byte_val & 0x0F) | 0xF0;
二、针对你的代码修改ecgi[2]为0x0F
先梳理下你原代码的逻辑:ecgi[2]是把mcc_mnc[3]的数字放在低4位,mcc_mnc[4]的数字放在高4位。但你的mcc_mnc是"272005",mcc_mnc[3]和mcc_mnc[4]都是'0',所以计算后得到0x00。
要让ecgi[2]变成0x0F(二进制00001111),也就是高4位保持0、低4位为0xF,给你几个简单的修改方案:
方案1:直接赋值最省事
如果不需要再使用mcc_mnc[3]和mcc_mnc[4]的数值,直接给ecgi[2]赋值目标值即可:
// Byte 3 ecgi[2] = 0x0F;
方案2:保留高4位逻辑,替换低4位
要是还想保留高4位来自mcc_mnc[4]的逻辑(哪怕当前值是0),只把低4位换成0xF:
// Byte 3 ecgi[2] = byte((mcc_mnc[4] - '0') << 4) | 0x0F;
这样高4位依然是mcc_mnc[4]的数字,低4位固定为0xF,当前场景下结果就是0x0F。
方案3:在原代码基础上追加位操作
如果不想大改原代码结构,可以在原有赋值之后加一行位或操作:
// Byte 3 ecgi[2] = byte(mcc_mnc[3] - '0'); ecgi[2] = ecgi[2] | byte((mcc_mnc[4] - '0') << 4); ecgi[2] |= 0x0F; // 把低4位强制置为0xF
这会把原本的低4位(0)替换成0xF,最终得到0x0F。
内容的提问来源于stack exchange,提问作者eeijlar
相关产品推荐
相关产品推荐

