摘要: 本文剖析asn-int.h/c,從源代碼來學習eSNACC對INTEGER的編碼和解碼。
eSNACC中的整形與上一篇所講的布爾型一樣,也很簡單,不過代碼中還是有一點有趣的地方。
閱讀全文
摘要: 本文剖析asn-bool.h/c,從源代碼來學習eSNACC對BOOLEAN的編碼和解碼。
閱讀全文
摘要: 本文剖析asn-len.h/c,從源代碼來學習eSNACC對長度的編碼和解碼。
在正式引出源代碼之前,我覺得非常有必要強調幾點非常重要的知識:
1、eSNACC編譯器對數據的編碼設計是反序的,也就是先編碼數據并寫進緩沖區,以此而知道了編碼好的數據長度,然后再將本長度值編碼插到緩沖區前面。這樣設計的目的是減少性能的損失。而很多其他編譯器是開一個臨時緩沖區來完成這個工作,這就帶來了性能的損失。詳細的說明,請參加eSNACC文檔。我們要記住的是eSNACC編碼時反序的。
2、eSNACC既支持確定長度編碼也支持不確定長度編碼。原理是:確定長度編碼,那么在數據之前的若干字節來表面后面數據的長度;若為不確定長度編碼,那么數據前面的長度字節為0x80,此代表長度不確定,然后在數據最后用EOC(End-Of-Contents)來表示數據的結束。
3、eSNACC支持BER和DER編碼。不過BER允許不確定長度,但是DER只支持確定長度,所以在他們的編碼解碼函數上有所不同。
4、如果感覺代碼中的PROTO和PARAMS很陌生,請讀本系列中的《關于老式函數聲明》一
閱讀全文