首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解码7位GSM

解码7位GSM
EN

Stack Overflow用户
提问于 2012-10-30 07:05:22
回答 4查看 14.1K关注 0票数 6

我发现这个post关于如何将ascii数据编码为7位GSM字符集,如何再次解码7位GSM字符(将其反转回ascii)?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-10-30 08:40:40

对于Python2:

代码语言:javascript
复制
import binascii
gsm = ("@£$¥èéùìòÇ\nØø\rÅåΔ_ΦΓΛΩΠΨΣΘΞ\x1bÆæßÉ !\"#¤%&'()*+,-./0123456789:;<=>?"
       "¡ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÑÜ`¿abcdefghijklmnopqrstuvwxyzäöñüà")
ext = ("````````````````````^```````````````````{}`````\\````````````[~]`"
       "|````````````````````````````````````€``````````````````````````")

def gsm_encode(plaintext):
    result = []
    for c in plaintext:
        idx = gsm.find(c)
        if idx != -1:
            result.append(chr(idx))
            continue
        idx = ext.find(c)
        if idx != -1:
            result.append(chr(27) + chr(idx))
    return ''.join(result).encode('hex')

def gsm_decode(hexstr):
    res = hexstr.decode('hex')
    res = iter(res)
    result = []
    for c in res:
        if c == chr(27):
            c = next(res)
            result.append(ext[ord(c)])
        else:
            result.append(gsm[ord(c)])
    return ''.join(result)

code = gsm_encode("Hello World {}")
print(code)
# 64868d8d903a7390938d853a1b281b29
print(gsm_decode(code))
# Hello World {}
票数 2
EN

Stack Overflow用户

发布于 2015-06-16 19:31:50

例如:

C7F7FBCC2E03代表“谷歌”

Python 3.4

代码语言:javascript
复制
def gsm7bitdecode(f):
   f = ''.join(["{0:08b}".format(int(f[i:i+2], 16)) for i in range(0, len(f), 2)][::-1])
   return ''.join([chr(int(f[::-1][i:i+7][::-1], 2)) for i in range(0, len(f), 7)])

print(gsm7bitdecode('C7F7FBCC2E03'))

谷歌

票数 7
EN

Stack Overflow用户

发布于 2014-01-14 22:18:53

有一个非常简单的解决方案:

将十六进制转换为二进制八位数,将每个八位数放入一个数组中,但顺序相反(整个八位数,而不是位),因为这是发送它们的方式。从右到左以7位为一组读取字符串,数字为GSM 7位表中的字符代码

例如:

C7F7FBCC2E03代表“谷歌”

相反顺序的字符串是

03-2E-CC-FB-F7-C7

六个二进制八位数是

00000011-00101110-11001100-11111011-11110111-11000111

七重奏是

000000-1100101-1101100-1100111-1101111-1101111-1000111

然后从右到左阅读如下:

GSM7位表中的septet decimal valor-Char

1000111-71-G

1101111-111-o

1101111-111-o

1100111-103-g

1101100-108-l

1100101-101-e

丢弃最后0000000个值

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13130935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档