You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SIM808模块字母数字Sender ID编码串解码方法咨询

解码SIM808收到的字母数字发送者ID编码

嘿,我来帮你搞定这个解码问题!你看到的14w4w2#45444147425其实是SIM808模块把字母数字发送者ID的GSM协议编码直接以ASCII字符形式返回的结果,咱们一步步来拆解它:

为什么会出现这种奇怪的编码?

当短信发送方使用字母数字ID(比如商家品牌名)时,GSM协议会用GSM 7-bit默认字符集把这个ID编码成字节流,而SIM808模块没有自动帮你解码成明文,直接把这些字节对应的ASCII字符输出了,所以就出现了这种看起来杂乱的字符串。

具体解码步骤

1. 把编码字符串转成字节数组

先把每个字符转换成对应的ASCII字节值,比如'1'对应0x31,'w'对应0x77,'#'对应0x23,以此类推。

2. 解码GSM 7-bit字符集

GSM 7-bit是用7位二进制表示一个字符,多个字符的编码会被打包成8位字节(简单说就是8个字符占7个字节)。解码时要:

  • 把所有字节的二进制位串连起来
  • 按每7位一段分割,每一段就是一个字符的编码值
  • 对照GSM 7-bit字符表,把编码值转成原始字符

3. 处理协议自带的长度指示

字母数字发送者ID的协议字段开头通常会有一个“长度字节”,用来表示ID的字符数,解码后如果开头有多余的字符,手动去掉就行。

用Python脚本自动解码

手动计算太麻烦,给你写个简单的Python脚本,直接运行就能得到结果:

# GSM 7-bit标准字符映射表,索引对应编码值
GSM_7BIT_TABLE = (
    "@£$¥èéùìòÇ\nØø\rÅåΔ_ΦΓΛΩΠΨΣΘΞ\x1bÆæßÉ !\"#¤%&'()*+,-./0123456789:;<=>?"
    "¡ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÑÜ`¿abcdefghijklmnopqrstuvwxyzäöñüà"
)

def decode_gsm_sender_id(encoded_str):
    # 把编码字符串转成ASCII字节数组
    data_bytes = encoded_str.encode('ascii')
    # 把所有字节转成二进制位串
    all_bits = ''.join(f"{byte:08b}" for byte in data_bytes)
    # 按7位分割解码
    decoded_chars = []
    for i in range(0, len(all_bits), 7):
        if i + 7 > len(all_bits):
            break
        # 把7位二进制转成十进制编码,再查映射表
        code = int(all_bits[i:i+7], 2)
        decoded_chars.append(GSM_7BIT_TABLE[code])
    return ''.join(decoded_chars)

# 替换成你收到的编码字符串
your_encoded_sender = "14w4w2#45444147425"
original_id = decode_gsm_sender_id(your_encoded_sender)
print(f"原始发送者ID: {original_id}")

如果解码后开头有奇怪的字符(比如数字或符号),大概率是协议里的长度指示,直接删掉前1-2个字符就好。

小提示

要是解码结果不对,可能是模块返回的编码做了半字节反转(就是每个字节的高低4位换了位置),这时候可以在脚本里加一步反转每个字节的高低4位再解码,比如把byte换成((byte & 0x0F) << 4) | ((byte & 0xF0) >> 4)。

内容的提问来源于stack exchange,提问作者Ankit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:48:23