如何在C ++中的字符数组中使用0xF填充半字节?

时间:2018-05-31 10:27:03

标签: c++

如果我有以下字符串:

stsTokenManager

我做了以下事情:

std::string mcc_mnc = "272005"

字节1 typedef unsigned char byte; byte ecgi[3]; //byte 1 ecgi[0] = byte(mcc_mnc[0] - '0'); ecgi[0] = ecgi[0] | byte((mcc_mnc[1] - '0') << 4); //byte 2 ecgi[1] = byte(mcc_mnc[2] - '0'); ecgi[1] = ecgi[1] | byte((mcc_mnc[5] - '0') << 4); //byte 3 ecgi[2] = byte(mcc_mnc[3] - '0'); ecgi[2] = ecgi[2] | byte((mcc_mnc[4] - '0') << 4); 现在应该包含:

ecgi[0]

字节2 01110010 (0x72) 现在应该包含:

ecgi[1]

字节3 01010010 (0x52) 现在应该包含:

ecgi[2]

我想改变上面的内容,以便Byte 3 00000000 (0x00) 看起来像这样:

ecgi[2]

1 个答案:

答案 0 :(得分:3)

只需将低半字节设置为全1即可:

ecgi[2] |= 0xf;

或者在一些支持二进制文字的(现代)编译器中:

ecgi[2] |= 0b1111;

执行按位OR运算,有效地设置右侧的所有位。