我从以下字符串中得到如下数字序列:
std::string mcc_mnc = "514328";
该字符串由MCC(移动国家代码),MNC(移动网络代码)组成。字符串总是6个字符长,当MNC小于100时,它前面加0。
我需要构造3个十六进制字节,如下所示:
| <--- 8 bits --> |
| 4 bits | 4 bits |
| ------------- |:-------------:|
| 1 | 5 |
| 8 | 4 |
| 2 | 3 |
每一行都应该是一个十六进制数,使用C ++ std库(pre C ++ 11):
00010101 (15)
10000100 (84)
00100011 (23)
根据User-Location-Info 3GPP标准的ECGI字段对其进行编码。有关格式,请参见屏幕截图。
答案 0 :(得分:1)
我想你可能想要这些内容:
typedef unsigned char byte;
std::string mcc_mnc = "514328";
byte ecgi[3];
ecgi[0] = byte(mcc_mnc[0] - '0');
ecgi[0] = ecgi[0] | byte((mcc_mnc[1] - '0') << 4);
ecgi[1] = byte(mcc_mnc[2] - '0');
ecgi[1] = ecgi[1] | byte((mcc_mnc[5] - '0') << 4);
ecgi[2] = byte(mcc_mnc[3] - '0');
ecgi[2] = ecgi[2] | byte((mcc_mnc[4] - '0') << 4);
std::cout << std::hex << int(ecgi[0]) << '\n';
std::cout << std::hex << int(ecgi[1]) << '\n';
std::cout << std::hex << int(ecgi[2]) << '\n';
从ASCII
中减去'0'
数字值(在字符串中),使其数值存储在给定的半字节中。
<强>输出:强>
15
84
23