Octet string 解析
百度百科的 ASN.1 http://baike.baidu.com/view/26378.htm
怎么解析,这里有微软的解析方法
If the byte array contains fewer than 128 bytes, the Length field of the TLV triplet requires only one byte to specify the content length. If it is more than 127 bytes, bit 7 of the Length field is set to 1 and bits 6 through 0 specify the number of additional bytes used to identify the content length. This is shown in the following example where the high order bit of the second byte on the first line is set to 1 and the byte indicates that there is a trailing Length byte. The third byte therefore specifies that the content is 0x80 bytes long.
以上就是解析,字节是代表什么意思
例如
当字符串字节数小于128的时候:
04 0a ; OCTET_STRING (a Bytes)
| 1e 08 00 55 00 73 00 65 00 72 ; ...U.s.e.r
解析
04 代表 OCTET_STRING 这个结构(参看基本类型汇总表)
0a 代表 字节的数量(a Bytes)
当字符串字节数大于127的时候:
04 81 80 ; OCTET_STRING (80 Bytes)
解析
04 仍然是 代表 OCTET_STRING 这个结构
81 代表 后面的计数有多少字节 0x81-0x80 = 0x01 这就代表1个字节(注意:这里的0x80不是上面字节串内的80,是字符串字节数大于127的时候,128计算出来的80)
所以后面的1个字节 80 就是字节长度了。
例如:
04 82 03 aa ; OCTET_STRING (3aa Bytes)
04 代表 OCTET_STRING 这个结构
82 代表 后面的计数有多少字节 0x82-0x80 = 0x02 这就代表2个字节
所以后面跟着的两个字节组合 就是字符串长度 03aa 代表 938个字节
下面是解析代码:
std::string OctetToString(const char * src_in,int size)
{
if(src_in[] == 0x04)
{
if((int)src_in[] <)
{
return string(src_in+,src_in[]);
}
else
{
int count_len = (int)src_in[]-0x80;
int content_len = ;
for(int i = ;i<count_len;i++)
{
count_len =count_len<<+ (int)src_in[+i];
} return (content_len > size? "":string(src_in+,content_len));
}
}
return "";
}
基本类型汇总表
-
类型
UNIVERSALTag
取值
BOOLEAN
1
TRUE,FALSE
NULL
5
NULL
INTEGER
2
整数
ENUMERATED
10
类型定义中列出的成员
REAL
9
实数
BIT STRING
3
比特串
OCTET STRING
4
八位组串,字节流
OBJECTIDENTIFIER
6
RELATIVE-OID
13
解释:位串:{1,0,0,0,1,1,1,0,1,0,0,1},第一字节10001110=0x8E;第二字节:1001需填充,填充后得到10010000=0x90,因为填充了4个0,得到表示填充数的一个字节0x04
则完整编码为:0x03 03 04 8E 90
BIT STRING结构 数据长度 (2字节数据+1字节填充个数) 填充个数字节 数据
Octet string 解析的更多相关文章
- 关于snmp octet string和普通string问题
我是获取的Octet String用String输出,输出的是一连串的2个16进制数 空格.:然后想对输出结果操作,得到我想要的值. 解决方案:private static string exchan ...
- IntelliJ IDEA 通过GsonFormat插件将JSONObject格式的String 解析成实体
GsonFormat插件主要用于使用Gson库将JSONObject格式的String 解析成实体,该插件可以加快开发进度,使用非常方便,效率高. 插件地址:https://plugins.jetbr ...
- GsonFormat插件主要用于使用Gson库将JSONObject格式的String 解析成实体,该插件可以加快开发进度,使用非常方便,效率高。
GsonFormat插件主要用于使用Gson库将JSONObject格式的String 解析成实体,该插件可以加快开发进度,使用非常方便,效率高. 插件地址:https://plugins.jetbr ...
- IDEAL葵花宝典:java代码开发规范插件:GsonFormat插件将JSONObject格式的String 解析成实体
前言: GsonFormat插件主要用于使用Gson库将JSONObject格式的String 解析成实体,该插件可以加快开发进度,使用非常方便,效率高. 这个教程主要是学习IntelliJ IDEA ...
- E. Median String 解析(思維、大數運算)
Codeforce 1144 E. Median String 解析(思維.大數運算) 今天我們來看看CF1144E 題目連結 題目 給你兩個長度為\(k\)的字串\(s\)和\(t\),求字典序排序 ...
- String解析
常量池(Constant Pool):指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据.JVM虚拟机为每个被装载的类型维护一个常量池.常量池就是该类型所用到常量的一个有序集和,包括 ...
- HDU 4668 Finding string (解析字符串 + KMP)
转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlove 题意:给出一个压缩后的串,以及一个模式串,问模式串 ...
- c++ string 解析ip
比如输入是192.168.80.12-15,解析成192.168.80.12.192.168.80.13.192.168.80.14.192.168.80.15. #include <iostr ...
- 类string解析
原创作品,转载请注明来源:http://www.cnblogs.com/shrimp-can/p/5645248.html 在涉及字符串的时候,我们可以定义字符数组或指针,其实还有一个类,专门是为字符 ...
随机推荐
- automaticallyAdjustsScrollViewInsets的作用
简单点说就是automaticallyAdjustsScrollViewInsets根据按所在界面的status bar,navigationbar,与tabbar的高度,自动调整scrollview ...
- 多加注意对null和“”的处理
程序中对一些需要再次取值的引用类型参数,在引用之前,请千万注意对空的判断.当不清晰返回结果是null还是""时,应先判断null,再判断空字符串. LOFTER:我们的故事 h ...
- php 查看文档
http://www.runoob.com/php/php-datatypes.html php 学习网站 : http://www.phpfans.net/
- python运维开发(十九)----Django后台表单验证、session、cookie、model操作
内容目录: Django后台表单验证 CSRF加密传输 session.cookie model数据库操作 Django后台Form表单验证 Django中Form一般有2种功能: 1.用于做用户提交 ...
- 基于cygwin构建u-boot(一)环境搭建
从本文开始,更系统的描述基于cygwin构建u-boot. 之前<痛苦的版本对齐>系列,对于cygwin环境下Sourcery CodeBench,u-boot-1.1.6的构建有侧面的说 ...
- C#基础之------控制台进程
/********************************************************************************* File:C#实现100以内两个数 ...
- QTableView使用HTML显示富文本
对于QTableView中的显示,我们前面介绍过很多种,其中包括:文本.进度条.复选框等,今天我们介绍一下关于富文本的显示. 可能绝大多数小伙伴会通过QAbstractTableModel中的data ...
- Linux下配置C/C++开发环境-----Eclipse
先自己去官网下载jdk. 解压即安装. 然后在~/.bashrc文件里面配置下环境变量就行了.在文件最后添加以下路径,如下: JAVA_HOME=/home/username/jdk/jdk1.8.0 ...
- java中list、set和map 的区别
List按对象进入的顺序保存对象,不做排序或编辑操作.Set对每个对象只接受一次,并使用自己内部的排序方法(通常,你只关心某个元素是否属于Set,而不关心它的顺序--否则应该使用List).Map同样 ...
- css案例学习之div ul li a 实现导航效果
效果 代码 <html> <head> <title>无需表格的菜单</title> <style> body{ background-co ...