如何从PLMN中提取MCC和MNC?

9
我正在运行AT命令AT+KCELL以获取小区信息,其中返回了一个PLMN(Public Land and Mobile Network),从文档中的描述来看:

PLMN标识符(3个字节),由MCC(移动国家代码)和MNC(移动网络代码)组成。

好的,这与维基百科所说的相符——其中包括MCC和MNC。现在我不明白的是如何提取上述MCC和MNC值?

以下是一个示例。我得到了以下回复:

32f210

我被告知(虽然我持怀疑态度)这应该会产生以下结果:

MNC: 1
MCC: 232

但我无论如何也想不出如何从PLMN获得该结果,那么我应该如何解析这个问题?


如果你在Unix系统上,可以尝试使用cut命令。 - Satya
我使用的是 Windows 系统,但我会查阅关于 cut 命令的资料,谢谢。 - kmp
2个回答

15

我已经找到了答案并想在这里添加一个答案,以防有其他不幸的人也需要这样做——名为GSM技术规范(第10.2.4节)的PDF文件中包含了答案,相关部分如下:

PLMN内容:移动国家代码(MCC)后跟移动网络代码(MNC)。编码:根据TS GSM 04.08 [14]。

  • 如果需要存储少于最大可能数量n的内容,则多余的字节应设置为“FF”。例如,使用246作为MCC和81作为MNC,如果这是第一个且唯一的PLMN,则内容如下:字节1-3:“42”、“F6”、“18”字节4-6:“FF”、“FF”、“FF”等。

所以我之前的怀疑是错误的!

我需要从左边开始读取并交换数字,所以前两个字节将是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();

7
事实上,移动国家码(MCC)占用了3个四位字节,移动网络代码(MNC)也占用了3个四位字节(美国运营商的MNC有3位数字)。将MCC / MNC保存为数字不是一个好主意,因为前导零很重要。所以,首先我们必须交换PLMN的四位字节,32f210 => 232f01,然后我们分配MCC=232MNC=01(忽略f)。但如果我们的运营商具有3位数字的MNC,则会出现以下情况:PLMN=130203 => 312030 => MCC=312,MNC=030 - Ulugbek Umirov

2

以下是一个使用位运算的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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接