精易论坛
标题: 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”)
变量名 类 型 静态 数组 备 注 数组_文本 文本型 0 二进制 文本型 0 i 整数型 局_临时文本 文本型 局_临时文本2 文本型 计数 整数型
文本_逐字分割 ( 文本, 数组_文本
) 计次循环首 ( 取数组成员数 ( 数组_文本
) , i
) 加入成员 ( 二进制,
取文本右边 ( 进制_十到二 ( 进制_十六到十 ( 字节集_字节集到十六进制 ( 到字节集 ( 数组_文本
[ i
] ) )
) ), 7
) )
计次循环尾 ( ) 数组_反转 ( 二进制
) 局_临时文本 =
数组_合并 ( 二进制,
“” ) 计数 = 0
清除数组 ( 二进制
) 判断循环首 ( 取文本长度 ( 局_临时文本
) > 0
) 加入成员 ( 二进制,
取文本右边 ( 局_临时文本, 8
) )
局_临时文本 =
取文本左边 ( 局_临时文本,
取文本长度 ( 局_临时文本
) - 8
) 判断循环尾 ( ) 计次循环首 ( 取数组成员数 ( 二进制
) , i
) 局_临时文本 =
进制_十到十六 ( 进制_二到十 ( 二进制
[ i
] ) ,
假 ) 如果真 ( 取文本长度 ( 局_临时文本
) = 1
) 局_临时文本 =
“0” + 局_临时文本
局_临时文本2 = 局_临时文本2 + 局_临时文本
计次循环尾 ( ) 返回 ( 局_临时文本2
) 变量名 类 型 静态 数组 备 注 字节集 字节集 二进制 文本型 0 i 整数型 局_临时文本 文本型 局_临时文本2 文本型
字节集 =
字节集_十六进制到字节集 ( 十六进制数据
) 计次循环首 ( 取字节集长度 ( 字节集
) , i
) 加入成员 ( 二进制,
取文本右边 ( 进制_十到二 ( 到整数 ( 字节集
[ i
] ) ), 8
) )
计次循环尾 ( ) 数组_反转 ( 二进制
) 局_临时文本 =
数组_合并 ( 二进制,
“” ) 清除数组 ( 二进制
) 判断循环首 ( 取文本长度 ( 局_临时文本
) > 0
) 加入成员 ( 二进制,
“0” +
取文本右边 ( 局_临时文本, 7
) )
局_临时文本 =
取文本左边 ( 局_临时文本,
取文本长度 ( 局_临时文本
) - 7
) 判断循环尾 ( ) 计次循环首 ( 取数组成员数 ( 二进制
) , i
) 局_临时文本 =
进制_十到十六 ( 进制_二到十 ( 二进制
[ i
] ) ,
假 ) 如果真 ( 取文本长度 ( 局_临时文本
) = 1
) 局_临时文本 =
“0” + 局_临时文本
局_临时文本2 = 局_临时文本2 + 局_临时文本
计次循环尾 ( ) 返回 ( 局_临时文本2
)
作者: 嫂子 时间: 2022-3-9 15:11
给你个标准写法
变量名 类 型 静态 数组 备 注 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
)
作者: 嫂子 时间: 2022-3-9 15:11
变量名 类 型 静态 数组 备 注 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
)
作者: 嫂子 时间: 2022-3-9 15:28
解码
变量名 类 型 静态 数组 备 注 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