精易论坛

标题: 7bit编码,7bit解码,把8字节编码成7字节 短xinpdu解析用到 [打印本页]

作者: 0010101    时间: 2022-3-9 14:19
标题: 7bit编码,7bit解码,把8字节编码成7字节 短xinpdu解析用到
最近在做短信格式pdu解析,记录并分享一下  其中用到7bit编码,7bit解码, ,说是编码解码实际是压缩
可以吧纯ansi字符的8字节压缩成7字节 ,可以让短息发送更多文字
用到精易模块 和zyjson模块
使用方法
调试输出 (编码_7bit (“5555”), “正确值:B55AAD06 ”)
调试输出 (解码_7bit (“B55AAD06”), “5555hex:35353535”)



  
子程序名返回值类型公开备 注
编码_7bit文本型 7bit编码  参考资料 https://blog.csdn.net/yizhesong/ ... tionNum=2&fps=1
参数名类 型参考可空数组备 注
文本文本型1234
变量名类 型静态数组备 注
数组_文本文本型0
二进制文本型0
i整数型 
局_临时文本文本型 
局_临时文本2文本型 
计数整数型 
文本_逐字分割 (文本, 数组_文本)
计次循环首 (取数组成员数 (数组_文本), i)
加入成员 (二进制, 取文本右边 (进制_十到二 (进制_十六到十 (字节集_字节集到十六进制 (到字节集 (数组_文本 [i])))), 7))
计次循环尾 ()
' 调试输出 (二进制)
数组_反转 (二进制)
局_临时文本 = 数组_合并 (二进制, “”)
' 调试输出 (局_临时文本)
计数 = 0
清除数组 (二进制)
判断循环首 (取文本长度 (局_临时文本) > 0)
加入成员 (二进制, 取文本右边 (局_临时文本, 8))
' 局_临时文本2 = 局_临时文本2 + 进制_十到十六 (进制_二到十 (取文本右边 (局_临时文本, 8)), )
局_临时文本 = 取文本左边 (局_临时文本, 取文本长度 (局_临时文本) - 8)
判断循环尾 ()
' 数组_反转 (二进制)
' 调试输出 (二进制)
计次循环首 (取数组成员数 (二进制), i)
' 调试输出 (进制_二到十 (二进制 [i]))
局_临时文本 = 进制_十到十六 (进制_二到十 (二进制 [i]), )
如果真 (取文本长度 (局_临时文本) = 1)
局_临时文本 = “0” + 局_临时文本

局_临时文本2 = 局_临时文本2 + 局_临时文本
计次循环尾 ()
返回 (局_临时文本2)
' 1              2              3             4
' 0110001    0110010   0110011  0110100
' 现在需要将没个字节补齐,也就是补到8位,
' 首先将1补齐,将2的最后一位补到1前面:00110001  011001  0110011 0110100
' 将2补齐,将3的最后两位不到2前面:     00110001  11011001 01100 0110100
' 将3补齐,将4的最后补到3前面:          00110001  11011001 10001100 0110
' 最后将4补齐,在最前面不上四个0:      00110001  11011001  10001100 0000110
' 这个时候1234字符串的编码就变为了: 0x31 0xd9 0x8c 0x06  该值正好就是我们的短信内容!
子程序名返回值类型公开备 注
解码_7bit文本型 参考资料 https://blog.csdn.net/wandersky0 ... m_relevant_index=12
参数名类 型参考可空数组备 注
十六进制数据文本型十六进制数据
变量名类 型静态数组备 注
字节集字节集 
二进制文本型0
i整数型 
局_临时文本文本型 
局_临时文本2文本型 
字节集 = 字节集_十六进制到字节集 (十六进制数据)
计次循环首 (取字节集长度 (字节集), i)
加入成员 (二进制, 取文本右边 (进制_十到二 (到整数 (字节集 [i])), 8))
计次循环尾 ()
' 调试输出 (“二进制”, 二进制)
数组_反转 (二进制)
局_临时文本 = 数组_合并 (二进制, “”)
' 调试输出 (局_临时文本)
清除数组 (二进制)
判断循环首 (取文本长度 (局_临时文本) > 0)
加入成员 (二进制, “0”取文本右边 (局_临时文本, 7))
局_临时文本 = 取文本左边 (局_临时文本, 取文本长度 (局_临时文本) - 7)
判断循环尾 ()
' 调试输出 (“二进制翻转后7转8”, 二进制)
计次循环首 (取数组成员数 (二进制), i)
' 调试输出 (进制_二到十 (二进制 [i]))
局_临时文本 = 进制_十到十六 (进制_二到十 (二进制 [i]), )
如果真 (取文本长度 (局_临时文本) = 1)
局_临时文本 = “0” + 局_临时文本

局_临时文本2 = 局_临时文本2 + 局_临时文本
计次循环尾 ()
返回 (局_临时文本2)


作者: 嫂子    时间: 2022-3-9 15:11
给你个标准写法
  
子程序名返回值类型公开备 注
Encode7bit文本型 
参数名类 型参考可空数组备 注
data文本型
变量名类 型静态数组备 注
len整数型 
i整数型 
cur整数型 
j整数型 
t文本型 
res文本型 
len = 取文本长度 (data)
i = 1
判断循环首 (i ≤ len)
判断 (i < len)
cur = 位与 (位或 (右移 (取代码 (data, i), j), 左移 (取代码 (data, i + 1), 7 - j)), 255)
cur = 位与 (右移 (取代码 (data, i), j), 255)
t = 格式化文本 (“%2.2X”, cur)
res = res + t
i = i + 1
j (j + 1) % 7
如果真 (j = 0)
i = i + 1

判断循环尾 ()
返回 (res)


i支持库列表   支持库注释   
eAPI应用接口支持库


作者: 嫂子    时间: 2022-3-9 15:11
  
子程序名返回值类型公开备 注
Encode7bit文本型 
参数名类 型参考可空数组备 注
data文本型
变量名类 型静态数组备 注
len整数型 
i整数型 
cur整数型 
j整数型 
t文本型 
res文本型 
len = 取文本长度 (data)
i = 1
判断循环首 (i ≤ len)
判断 (i < len)
cur = 位与 (位或 (右移 (取代码 (data, i), j), 左移 (取代码 (data, i + 1), 7 - j)), 255)
cur = 位与 (右移 (取代码 (data, i), j), 255)
t = 格式化文本 (“%2.2X”, cur)
res = res + t
i = i + 1
j (j + 1) % 7
如果真 (j = 0)
i = i + 1

判断循环尾 ()
返回 (res)


i支持库列表   支持库注释   
eAPI应用接口支持库


作者: 嫂子    时间: 2022-3-9 15:28
解码
  
子程序名返回值类型公开备 注
Decode7bit文本型 
参数名类 型参考可空数组备 注
data文本型
变量名类 型静态数组备 注
srclen整数型 
nsrc整数型 
tmpchar整数型 
nbyte整数型 
pDst文本型 
nleft整数型 
a文本型 
srclen = 取文本长度 (data)
nsrc = 1
nbyte = 0
nleft = 0
判断循环首 (nsrc < srclen)
tmpchar = Hex2Int (取文本中间 (data, nsrc, 2))
pDst = pDst + 字符 (位与 (位或 (左移 (tmpchar, nbyte), nleft), 127))
nleft = 右移 (tmpchar, 7 - nbyte)
nbyte = nbyte + 1
如果真 (nbyte = 7)
pDst = pDst + 字符 (nleft)
nbyte = 0
nleft = 0
nsrc = nsrc + 2
判断循环尾 ()
返回 (pDst)


作者: 灵感吖    时间: 2022-3-9 15:33
支持一下,下载看看
作者: 晴天大佬    时间: 2022-3-9 15:51

作者: 一一一2    时间: 2022-3-9 16:40
什么时候会用到这个
作者: 嫂子    时间: 2022-3-9 16:56
其他语言有现成的 翻译即可。我是翻译自 Delphi代码
作者: 杨明煜    时间: 2022-3-9 20:22
支持一下,谢谢!......
作者: xjshuaishuai    时间: 2022-3-9 20:45
谢谢分享!
作者: 红桃じ简简箪箪    时间: 2022-3-9 21:05
支持一下,下载看看
作者: itoljeipw    时间: 2022-3-9 23:29
谢谢分享!
作者: 治愈勇者    时间: 2022-3-10 01:01
谢谢大佬分享 支持支持
作者: 凉忆亦凉心    时间: 2022-3-11 02:03
666666666666666
作者: 面向春天想躺平    时间: 2022-3-11 13:50
6666666666666666666
作者: yxj123    时间: 2022-3-18 13:42
顶,学习一下
作者: ghost12    时间: 2022-3-26 01:02
全论坛易友发来贺电




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4