我正在运行AT命令AT+KCELL以获取单元信息,它除其他外返回一个PLMN
(公共陆地和移动网络) --文档中对此的描述如下:
PLMN标识符(3个字节),由MCC (移动国家代码)和MNC (移动网络代码)组成。
好的,这与维基百科的说法相符--在这里有MCC和MNC。现在我不明白的是如何提取上述MCC和MNC值?
下面是一个例子。我回来了:
32f210
我被告知(尽管我对此表示怀疑),这将导致:
MNC: 1
MCC: 232
但在我的一生中,我无法想出如何从PLMN中得到这个结果,所以我如何解析这个结果呢?
发布于 2012-04-27 17:15:15
好吧,我已经发现了这个问题,我想在这里加上一个答案,以防有其他不幸的人不得不这么做--名为GSM技术规范的PDF (第10.2.4节)包含了答案,相关的部分是:
PLMN内容:移动国家代码(MCC),其次是移动网络代码(MNC)。编码:根据TS GSM 04.08 14。
所以我怀疑是错的!
我需要从左边读取,把数字交换过来,所以前两个字节是MCC,所以是232f
,而MNC是01
,然后我丢弃f,我有232和1!很高兴有一个被分类了。
例如,在c#中,您可以这样做:
string plmn = "whatever the plmn is";
string mcc = new string(plmn.Substring(0, 2).Reverse().ToArray())
+ new string(plmn.Substring(2, 2).Reverse().ToArray())
.Replace('f', ' ')
.Trim();
string mnc = new string(plmn.Substring(4, 2).Reverse().ToArray())
.Replace('f', ' ')
.Trim();
发布于 2016-10-28 06:57:29
下面是一个按位操作的java答案:
public static String mcc(byte[] plmnId) {
if (plmnId == null || plmnId.length != 3)
throw new IllegalArgumentException(String.format("Wrong plmnid %s", Arrays.toString(plmnId)));
int a1 = plmnId[0] & 0x0F;
int a2 = (plmnId[0] & 0xF0) >> 4;
int a3 = plmnId[1] & 0x0F;
return "" + a1 + a2 + a3;
}
public static String mnc(byte[] plmnId) {
if (plmnId == null || plmnId.length != 3)
throw new IllegalArgumentException(String.format("Wrong plmnid %s", Arrays.toString(plmnId)));
int a1 = plmnId[2] & 0x0F;
int a2 = (plmnId[2] & 0xF0) >> 4;
int a3 = (plmnId[1] & 0xF0) >> 4;
if (a3 == 15)
return "" + a1 + a2;
else
return "" + a1 + a2 + a3;
}
https://stackoverflow.com/questions/10345379
复制相似问题