我收到了类似PDU的消息,但我只收到消息“C824”
PDU example, 040C9119898392752300008010610014412202C834
04 - first octet
0C - phone number length
91 - phone number type
198983927523 - phone number
00 - protocol identifier
00 - data coding scheme
80106100144122 - time stamp
02 - message length
C834 - message, i.e. "Hi"
我需要知道格式是什么格式(“C834”)转换为“Hi”。我怎么可能把它翻译成人类可读的语言?
最诚挚的问候,
答案 0 :(得分:5)
SMS消息是7位ASCII打包成8位流。您可以阅读格式in section 6.1 of the specification (pdf)
在您的示例中,“C8 34”等于:
Hex Binary
C8 11001000
34 00110100
使用文档中的规则进行拆分时,它看起来像这样:
Hex Binary
48 1001000 most significant bit is moved to next char's least significant bit
69 1101001
00 00
要解析这个,你想做这样的事情:
bytes = (0xC8, 0xF7, 0x1D, 0x14, 0x96, 0x97, 0x41, 0xF9, 0x77, 0xFD, 0x07)
number = 0
bitcount = 0
output = ''
for byte in bytes:
# add data on to the end
number = number + (byte << bitcount)
# increase the counter
bitcount = bitcount + 1
# output the first 7 bits
output = output + '%c' % (number % 128)
# then throw them away
number = number >> 7
# every 7th letter you have an extra one in the buffer
if bitcount == 7:
output = output + '%c' % (number)
bitcount = 0
number = 0
print output
不是最优雅的解决方案,但它应该有效。 Here's a JavaScript implementation也可能有帮助。
答案 1 :(得分:3)
有一个非常简单的解决方案:
以二进制八位字节转换十六进制 将每个八位字节放在一个数组中,但处于反向模式(整个八位字节,而不是位) 从7位组中读取从右到左的字符串 该号码是GSM 7位表中的字符代码
例如:
C7F7FBCC2E03代表'Google'
相反顺序的strin是
03-2E-CC-FB-F7-C7
六个八位字节是
00000011-00101110-11001100-11111011-11110111-11000111
septets
000000-1100101-1101100-1100111-1101111-1101111-1000111
从右到左阅读:
GSM 7bit表中的septet-decimal valor-Char
1000111-71-G
1101111-111邻
1101111-111邻
1100111-103-G
1101100-108 -1-
1100101-101-E
丢弃最后的0000000值