java组装tlv_JAVA的TLV组解包
有项目使用到了TLV组解包的模式,特意在此记录,以供参考:
/**
* 将字符串转换为TLV对象
* Created by ZFR on 2019/5/29.
*/
public class TlvUtils {
/**
* 将16进制字符串转换为TLV对象列表
*
* @param hexString
* @return
*/
public static ListbuilderTlvList(String hexString) {
Listtlvs = new ArrayList();
int position = 0;
while (position != StringUtils.length(hexString)) {
String _hexTag = getTag(hexString, position);
Log.d("zfr-_hexTag:===", _hexTag);
position += _hexTag.length();
LPositon l_position = getLengthAndPosition(hexString, position);
int _vl = l_position.get_vL();
position = l_position.get_position();
String _value = StringUtils.substring(hexString, position, position + _vl * 2);
position = position + _value.length();
tlvs.add(new TLV2(_hexTag, _vl, _value));
}
return tlvs;
}
/**
* 将16进制字符串转换为TLV对象MAP
*
* @param hexString
* @return
*/
public static MapbuilderTlvMap(String hexString) {
Maptlvs = new HashMap();
int position = 0;
while (position != hexString.length()) {
String _hexTag = getTag(hexString, position);
position += _hexTag.length();
LPositon l_position = getLengthAndPosition(hexString, position);
int _vl = l_position.get_vL();
position = l_position.get_position();
String _value = hexString.substring(position, position + _vl * 2);
position = position + _value.length();
tlvs.put(_hexTag, new TLV2(_hexTag, _vl, _value));
}
return tlvs;
}
/**
* 返回最后的Value的长度
*
* @param hexString
* @param position
* @return
*/
private static LPositon getLengthAndPosition(String hexString, int position) {
String firstByteString = hexString.substring(position, position + 4);
Log.d("zfr-firstByteString====", firstByteString);
return new LPositon(Integer.parseInt(zfrUtils.toStringHex(firstByteString)), position + 4);
/*int i = Integer.parseInt(firstByteString, 16);
String hexLength = "";
if (((i >>> 7) & 1) == 0) {
hexLength = hexString.substring(position, position + 2);
position = position + 2;
} else {
// 当最左侧的bit位为1的时候,取得后7bit的值,
int _L_Len = i & 127;
position = position + 2;
hexLength = hexString.substring(position, position + _L_Len * 2);
// position表示第一个字节,后面的表示有多少个字节来表示后面的Value值
position = position + _L_Len * 2;
}
return new LPositon(Integer.parseInt(hexLength, 16), position);*/
}
/**
* 取得子域Tag标签
*
* @param hexString
* @param position
* @return
*/
private static String getTag(String hexString, int position) {
String firstByte = StringUtils.substring(hexString, position, position + 4);
Log.d("zfr-firstByte:==", firstByte);
return hexString.substring(position, position + 4);
/*int i = Integer.parseInt(firstByte, 16);
Log.d("zfr-i:==",i+"");
if ((i & 0x1f) == 0x1f) {
Log.d("zfr-2字节:=====","0000000000");
return hexString.substring(position, position + 4);
} else {
Log.d("zfr-1字节:=====","0000000000");
return hexString.substring(position, position + 2);
}*/
}
}
注:如有问题可以回复,看到第一时间分析解决,码农不易,感觉对您有用,帮助到您,可否打赏一杯可乐,在此谢过诸位,愿诸君终成大神,前程似锦~~~
java组装tlv_JAVA的TLV组解包相关推荐
- RPG Maker MV游戏解包
该文章最新版本请前往:https://www.crowsong.xyz/127.html 前言 使用Petschko's RPG-Maker-MV File-Decrypter进行解包 使用Petsc ...
- java socket发送定长报文_定长消息报文的组包与解包简单封装(Java实现)
报文 组包 解包 在实际项目中经常会碰到不同系统之间的数据交换,有些是用webservice.有些则是使用发socket消息的方式,将需要发送的消息组装成特定格式的字符串或Xml格式的文件,再通过so ...
- Java版ISO8583报文组包/解包
文章目录 一.8583协议简介 二.位图规则 三.8583格式报文参考 四.组包/解包思路 五.相关代码 一.8583协议简介 8583协议是基于ISO8583报文国际标准的包格式的通讯协议,85 ...
- Protobuf解包组包
解包代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Sy ...
- C杂讲 字符串格式化 组包与解包
知识点1[sprintf组包] 案例: int sprintf(buf,"格式",数据) //buf:用来存放组好的报文 //"格式":按照格式组包 //数据: ...
- C语言字符串的组包解包
组包解包 sprintf组包 sscanf解包 sscanf的高级用法1:使用%*s %*d 跳过提取的内容(不要提取的内容) sscanf的高级用法2:使用%[n]s %[n]d 提取指定宽度n的字 ...
- C语言---sprintf组包、sscanf解包
目录 一.sprintf组包(了解) (一)案例1:将2022 9 24这三个数据组成一个"2022年9月24日" (二)案例2:将一个人的姓名.年龄.性别.家庭地址组成要求的格式 ...
- python unpacking_python packing unpacking 组包解包
packing 组包,函数使用 [*] (for tuples)[元组], & [**](for dict) [ 字典]来接受可迭代的参数 unpacking 解包 ,函数内部定义多个参数(可 ...
- gb28181简单解包rtp ps流,推出rtmp(java版基于springboot):六、解包rtp ps流,推出rtmp
解析流程参考 https://blog.csdn.net/chen495810242/article/details/39207305 代码基于github上的修改 https://github.co ...
最新文章
- CentOS6.5 升级 Python 2.7 版本
- 可能是目前最给力的开源硬件——ESPlay Micro V2,童芯派劲敌他来了
- Java对【JSON数据的解析】--官方解析法
- 指针嵌套指针 拷贝_C++智能指针小结
- cacti 整合nagios,以及总是off处理办法!
- 无需Grouping,中科大和微软亚研院提出Group-Free的三维物体检测方法,性能远超之前最好方法。...
- redis系列:分布式锁
- ahp层次分析法_基于层次分析法(AHP)的店铺选址应用研究
- 赵雅智_Swift(2)_swift常量和变量
- 开源软件 依赖_新的开源依赖项管理器在场
- 【汇编语言/底层开发】9、转移指令的原理
- php获取表单ip,PHP获取用户IP代码实现
- bzoj 1171 并查集优化顺序枚举 | 线段树套单调队列
- Oracle如何一次插入多条数据
- 一套小程序源码多少钱_微信点餐小程序怎么做,微信扫码点餐系统多少钱一套?...
- 用html写个人简历
- 一周畅销书速报 | 端午节特别版
- php程序员后期发展前景,浅谈php程序员发展前景(一)
- 09-03 NOIP模拟测试36
- rtx服务器限制文件传输,rtx 服务器 文件传输 配置