摘要: 本文剖析asn-bool.h/c,從源代碼來學(xué)習(xí)eSNACC對BOOLEAN的編碼和解碼。
閱讀全文
摘要: 本文剖析asn-len.h/c,從源代碼來學(xué)習(xí)eSNACC對長度的編碼和解碼。
在正式引出源代碼之前,我覺得非常有必要強調(diào)幾點非常重要的知識:
1、eSNACC編譯器對數(shù)據(jù)的編碼設(shè)計是反序的,也就是先編碼數(shù)據(jù)并寫進緩沖區(qū),以此而知道了編碼好的數(shù)據(jù)長度,然后再將本長度值編碼插到緩沖區(qū)前面。這樣設(shè)計的目的是減少性能的損失。而很多其他編譯器是開一個臨時緩沖區(qū)來完成這個工作,這就帶來了性能的損失。詳細(xì)的說明,請參加eSNACC文檔。我們要記住的是eSNACC編碼時反序的。
2、eSNACC既支持確定長度編碼也支持不確定長度編碼。原理是:確定長度編碼,那么在數(shù)據(jù)之前的若干字節(jié)來表面后面數(shù)據(jù)的長度;若為不確定長度編碼,那么數(shù)據(jù)前面的長度字節(jié)為0x80,此代表長度不確定,然后在數(shù)據(jù)最后用EOC(End-Of-Contents)來表示數(shù)據(jù)的結(jié)束。
3、eSNACC支持BER和DER編碼。不過BER允許不確定長度,但是DER只支持確定長度,所以在他們的編碼解碼函數(shù)上有所不同。
4、如果感覺代碼中的PROTO和PARAMS很陌生,請讀本系列中的《關(guān)于老式函數(shù)聲明》一
閱讀全文
摘要: #ifdef __USE_ANSI_C__
#define PROTO( X) X
#else /* !__USE_ANSI_C__ */
#define PROTO( X) ()
#endif /* __USE_ANSI_C__ */
閱讀全文
摘要: 程序設(shè)計語言層次結(jié)構(gòu) C、C++、Java
閱讀全文
摘要: linux用文件鎖實現(xiàn)保證一個程序只能啟動一個進程
閱讀全文
摘要: windows2003服務(wù)之FTP
閱讀全文
摘要: python和UE中匹配中文的正則表達式&python全字匹配替換
閱讀全文