﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-小吴的技术思考-随笔分类-eSNACC学习</title><link>http://www.cppblog.com/Tim/category/19160.html</link><description>灵活的思考，严谨的实现&lt;br&gt;
什么是未定义的行为：你的计算机可能崩溃、地球可以停止自转、你可能飞到云上，也可能掉到了地狱里...</description><language>zh-cn</language><lastBuildDate>Fri, 27 Apr 2012 07:48:13 GMT</lastBuildDate><pubDate>Fri, 27 Apr 2012 07:48:13 GMT</pubDate><ttl>60</ttl><item><title>eSNACC的C运行时库动态内存管理</title><link>http://www.cppblog.com/Tim/archive/2012/04/27/172926.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Fri, 27 Apr 2012 07:42:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2012/04/27/172926.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/172926.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2012/04/27/172926.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/172926.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/172926.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文研究eSNACC的C运行时库动态内存管理。<br><br>eSNACC的运行时库和代码生成用的内存管理函数用的是统一的宏定义原型，但是支持用户自己配置内存管理方案。eSNACC本身提供两种内存管理方案：<br><br>一个是mem.h/c定义的直接分配；另一个是nibble-alloc.h/c定义的Nibble memory系统。<br>&nbsp;&nbsp;<a href='http://www.cppblog.com/Tim/archive/2012/04/27/172926.html'>阅读全文</a><img src ="http://www.cppblog.com/Tim/aggbug/172926.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2012-04-27 15:42 <a href="http://www.cppblog.com/Tim/archive/2012/04/27/172926.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>剖析eSNACC的hash函数</title><link>http://www.cppblog.com/Tim/archive/2012/04/26/172790.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Thu, 26 Apr 2012 07:37:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2012/04/26/172790.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/172790.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2012/04/26/172790.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/172790.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/172790.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 我们前面已经写了一篇文章剖析eSNACC哈希结构的设计和实现 剖析eSNACC哈希结构的设计和实现 ，而本篇我们专门剖析eSNACC中的hash函数。&nbsp;&nbsp;<a href='http://www.cppblog.com/Tim/archive/2012/04/26/172790.html'>阅读全文</a><img src ="http://www.cppblog.com/Tim/aggbug/172790.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2012-04-26 15:37 <a href="http://www.cppblog.com/Tim/archive/2012/04/26/172790.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>剖析eSNACC哈希结构的设计和实现</title><link>http://www.cppblog.com/Tim/archive/2012/04/26/172751.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Thu, 26 Apr 2012 07:36:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2012/04/26/172751.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/172751.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2012/04/26/172751.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/172751.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/172751.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文剖析hash.h/c，从源代码来剖析eSNACC哈希结构的设计和实现。 <br><br>为什么要在这里剖析hash呢？一个顺理成章的理由是：我们准备剖析eSNACC对ANY(s)类型的编码和解码，可是ANY的实现依赖于hash，所以我们就需要先把这条路打通了。O(∩_∩)O哈哈~是不是很有说服力呀？ <br><br>好，闲话少述，言规正传。我们知道hash对一个系统而言，一般都是一个很有价值的底层基础设施。从作用上来说，他实现的优劣极大的影响着整个系统的性能。从技术上来说，也是很能体现含金量的一个模块。所以，对eSNACC实现的这个宝藏，我们下定决心要刨根问底、直捣黄龙！<br>&nbsp;&nbsp;<a href='http://www.cppblog.com/Tim/archive/2012/04/26/172751.html'>阅读全文</a><img src ="http://www.cppblog.com/Tim/aggbug/172751.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2012-04-26 15:36 <a href="http://www.cppblog.com/Tim/archive/2012/04/26/172751.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eSNACC对ASN.1 constructors的处理</title><link>http://www.cppblog.com/Tim/archive/2012/04/25/172725.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Wed, 25 Apr 2012 07:01:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2012/04/25/172725.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/172725.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2012/04/25/172725.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/172725.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/172725.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 首先让我们来学习一下ASN.1的Constructors类型 。<br>然后我们来研究eSNACC的C代码生成和C运行时库对ASN.1 constructors的处理办法。<br>&nbsp;&nbsp;<a href='http://www.cppblog.com/Tim/archive/2012/04/25/172725.html'>阅读全文</a><img src ="http://www.cppblog.com/Tim/aggbug/172725.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2012-04-25 15:01 <a href="http://www.cppblog.com/Tim/archive/2012/04/25/172725.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eSNACC对OBJECT IDENTIFIER的编码和解码 </title><link>http://www.cppblog.com/Tim/archive/2012/04/24/172620.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Tue, 24 Apr 2012 08:30:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2012/04/24/172620.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/172620.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2012/04/24/172620.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/172620.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/172620.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文剖析asn-oid.h/c，从源代码来学习eSNACC对OBJECT IDENTIFIER的编码和解码。<br><br>在研究代码之前，我们先来说明什么是OBJECT IDENTIFIER。<br><br>&nbsp;&nbsp;<a href='http://www.cppblog.com/Tim/archive/2012/04/24/172620.html'>阅读全文</a><img src ="http://www.cppblog.com/Tim/aggbug/172620.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2012-04-24 16:30 <a href="http://www.cppblog.com/Tim/archive/2012/04/24/172620.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eSNACC对ASN.1内置字符串的编码和解码</title><link>http://www.cppblog.com/Tim/archive/2012/04/24/172484.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Tue, 24 Apr 2012 03:41:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2012/04/24/172484.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/172484.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2012/04/24/172484.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/172484.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/172484.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: eSNACC运行时库直接支持各种各样的ASN.1字符串定义。这包括PrintableString, BMPString, TeletexString, NumericString, IA5String, UniversalString, UTF8String, VisibleString。其做法也大同小异，所有这些字符串都是在eSNACC的字节串基础上typedef过来的，只是根据各自特性的不同而在编码解码时有某些判断，或者加了某些判断函数等。只有UTF8String相对比较复杂一些。让我们一起来分析一下吧。   <br><br>&nbsp;&nbsp;<a href='http://www.cppblog.com/Tim/archive/2012/04/24/172484.html'>阅读全文</a><img src ="http://www.cppblog.com/Tim/aggbug/172484.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2012-04-24 11:41 <a href="http://www.cppblog.com/Tim/archive/2012/04/24/172484.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eSNACC对OCTET STRING 的编码和解码 </title><link>http://www.cppblog.com/Tim/archive/2012/04/23/172461.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Mon, 23 Apr 2012 08:22:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2012/04/23/172461.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/172461.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2012/04/23/172461.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/172461.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/172461.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文剖析asn-octs.h/c，从源代码来学习eSNACC对OCTET STRING的编码和解码。<br><br>eSNACC对字节串OCTET STRING的处理与上一篇描述的比特串的方法类似，而且字节串的处理更加简单。所以在上一篇的基础上，我们专门分析上一篇中对连接型串解码时没有展开讲的函数，也作为上一篇的补充。&nbsp;&nbsp;<a href='http://www.cppblog.com/Tim/archive/2012/04/23/172461.html'>阅读全文</a><img src ="http://www.cppblog.com/Tim/aggbug/172461.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2012-04-23 16:22 <a href="http://www.cppblog.com/Tim/archive/2012/04/23/172461.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eSNACC对BIT STRING的编码和解码 </title><link>http://www.cppblog.com/Tim/archive/2012/04/22/172355.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Sun, 22 Apr 2012 10:20:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2012/04/22/172355.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/172355.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2012/04/22/172355.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/172355.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/172355.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文剖析asn-bits.h/c，从源代码来学习eSNACC对BIT STRING的编码和解码。<br><br>比特字符串的编码和解码比较复杂，而且我认为还存在一些问题，我们来仔细分析一下代码吧。<br><br>&nbsp;&nbsp;<a href='http://www.cppblog.com/Tim/archive/2012/04/22/172355.html'>阅读全文</a><img src ="http://www.cppblog.com/Tim/aggbug/172355.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2012-04-22 18:20 <a href="http://www.cppblog.com/Tim/archive/2012/04/22/172355.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eSNACC对INTEGER的编码和解码 </title><link>http://www.cppblog.com/Tim/archive/2012/04/20/172153.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Fri, 20 Apr 2012 09:26:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2012/04/20/172153.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/172153.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2012/04/20/172153.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/172153.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/172153.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文剖析asn-int.h/c，从源代码来学习eSNACC对INTEGER的编码和解码。<br><br>eSNACC中的整形与上一篇所讲的布尔型一样，也很简单，不过代码中还是有一点有趣的地方。<br>&nbsp;&nbsp;<a href='http://www.cppblog.com/Tim/archive/2012/04/20/172153.html'>阅读全文</a><img src ="http://www.cppblog.com/Tim/aggbug/172153.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2012-04-20 17:26 <a href="http://www.cppblog.com/Tim/archive/2012/04/20/172153.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eSNACC对BOOLEAN的编码和解码</title><link>http://www.cppblog.com/Tim/archive/2012/04/20/172146.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Fri, 20 Apr 2012 07:55:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2012/04/20/172146.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/172146.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2012/04/20/172146.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/172146.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/172146.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文剖析asn-bool.h/c，从源代码来学习eSNACC对BOOLEAN的编码和解码。&nbsp;&nbsp;<a href='http://www.cppblog.com/Tim/archive/2012/04/20/172146.html'>阅读全文</a><img src ="http://www.cppblog.com/Tim/aggbug/172146.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2012-04-20 15:55 <a href="http://www.cppblog.com/Tim/archive/2012/04/20/172146.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eSNACC对长度的编码和解码</title><link>http://www.cppblog.com/Tim/archive/2012/04/20/172105.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Fri, 20 Apr 2012 03:00:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2012/04/20/172105.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/172105.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2012/04/20/172105.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/172105.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/172105.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文剖析asn-len.h/c，从源代码来学习eSNACC对长度的编码和解码。<br>在正式引出源代码之前，我觉得非常有必要强调几点非常重要的知识：<br>1、eSNACC编译器对数据的编码设计是反序的，也就是先编码数据并写进缓冲区，以此而知道了编码好的数据长度，然后再将本长度值编码插到缓冲区前面。这样设计的目的是减少性能的损失。而很多其他编译器是开一个临时缓冲区来完成这个工作，这就带来了性能的损失。详细的说明，请参加eSNACC文档。我们要记住的是eSNACC编码时反序的。<br>2、eSNACC既支持确定长度编码也支持不确定长度编码。原理是：确定长度编码，那么在数据之前的若干字节来表面后面数据的长度；若为不确定长度编码，那么数据前面的长度字节为0x80，此代表长度不确定，然后在数据最后用EOC（End-Of-Contents）来表示数据的结束。<br>3、eSNACC支持BER和DER编码。不过BER允许不确定长度，但是DER只支持确定长度，所以在他们的编码解码函数上有所不同。<br>4、如果感觉代码中的PROTO和PARAMS很陌生，请读本系列中的《关于老式函数声明》一&nbsp;&nbsp;<a href='http://www.cppblog.com/Tim/archive/2012/04/20/172105.html'>阅读全文</a><img src ="http://www.cppblog.com/Tim/aggbug/172105.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2012-04-20 11:00 <a href="http://www.cppblog.com/Tim/archive/2012/04/20/172105.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于老式函数声明</title><link>http://www.cppblog.com/Tim/archive/2012/04/19/172001.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Thu, 19 Apr 2012 08:46:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2012/04/19/172001.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/172001.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2012/04/19/172001.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/172001.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/172001.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: #ifdef __USE_ANSI_C__<br>#define PROTO( X)			X<br>#else /* !__USE_ANSI_C__ */<br>#define PROTO( X)			()<br>#endif /* __USE_ANSI_C__ */&nbsp;&nbsp;<a href='http://www.cppblog.com/Tim/archive/2012/04/19/172001.html'>阅读全文</a><img src ="http://www.cppblog.com/Tim/aggbug/172001.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2012-04-19 16:46 <a href="http://www.cppblog.com/Tim/archive/2012/04/19/172001.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>