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 在涉及字符串的时候,我们可以定义字符数组或指针,其实还有一个类,专门是为字符 ...
随机推荐
- 【转载】ADO.NET与ORM的比较(3):Linq to SQL实现CRUD
[转载]ADO.NET与ORM的比较(3):Linq to SQL实现CRUD 说明:个人感觉在Java领域大型开发都离不了ORM的身影,所谓的SSH就是Spring+Struts+Hibernate ...
- 数值的N次方
问题描述: 实现函数double Power(double base,int exponent),求base的exponent次方.不得使用库函数, 同时不需考虑大数问题. 思路分析: 要是你秒秒钟想 ...
- python中json的操作示例
先上一段示例 # -*- coding: cp936 -*- import json #构造一个示例数据,并打印成易读样式 j = {} j["userName"]="a ...
- Dx 1 error; aborting Conversion to Dalvik format failed with error 1
Dx 1 error; aborting Conversion to Dalvik format failed with error 1 问题实质是工程中android.jar包大于一个: 保留一个a ...
- js抽象类和抽象方法
js中模拟抽象类:在父类中调用一个未定义的方法,这个方法在子类中必须被实现. 1, 模拟类的工厂模式 //基类 var Class = { //基类的静态方法 creat:function(){ // ...
- CSS3弹性盒模型布局模块介绍
来源:Robert’s talk原文:http://robertnyman.com/2010/12/02/css3-flexible-box-layout-module-aka-flex-box-in ...
- log4net使用(包括单个文件和按日期生成多个文件)
1.log4net生成单个文件 直接将这段代码考到config中即可用 <log4net> <!--定义输出到文件中--> <appender name="Lo ...
- sql中插入多条记录-微软批处理
这是使用批处理的一个例子: System.IO.StreamWriter messagelog = null; string messageString = ""; SqlConn ...
- centos6.4x64安装vncserver
参考文章:http://blog.csdn.net/mchdba/article/details/43058849 主要是远程安装oracle11g需要用到这个东西: 进入系统依次执行下列命令: #查 ...
- socket基础(二)
Microsoft.Net Framework为应用程序访问Internet提供了分层的.可扩展的以及受管辖的网络服务,其名字空间System.Net和System.Net.Sockets包含丰富的类 ...