?? asn1tag.cpp
字號:
// ASN1Tag.cpp: implementation of the CASN1Tag class.////////////////////////////////////////////////////////////////////////#include "ASN1Tag.h"#include "ASN1Exception.h"//////////////////////////////////////////////////////////////////////// Construction/Destruction//////////////////////////////////////////////////////////////////////namespace ASN1{ static String TAG_NAMES[] = { "End of Content", "BOOLEAN", "INTEGER", "BIT_STRING", "OCTET_STRING", "NULL", "OBJECT_IDENTIFIER", "OBJECT_DESCRIPTOR", "EXTERNAL", "REAL", "ENUMERATED", "EMBEDDED_PDV", "UTF8STRING", "Unknown", "Unknown", "Unknown", "SEQUENCE", "SET", "NUMERICSTRING", "PRINTABLESTRING", "T61STRING", "VIDEOTEXSTRING", "IA5String", "UTCTime", "GENERALIZEDTIME", "GRAPHICSTRING", "VISIBLESTRING", "GENERALSTRING", "UNIVERSALSTRING", "UNKNOWN", "BMPSTRING" }; static String CLASS_NAMES[] = { "UNIVERSAL", "APPLICATION", "CONTEXT", "PRIVATE" }; CASN1Tag::CASN1Tag(int iTagNumber, int iTagClass, int iTagMode) { m_iTagClass=iTagClass; m_iTagNumber=iTagNumber; m_iTagMode=iTagMode; } CASN1Tag::CASN1Tag(const char* szInputStream, int nLength) { const char* p = szInputStream; m_iTagClass = *p >> 6; int tmp = *p & 0x1F; m_iTagNumber = tmp; } int CASN1Tag::Create(int iTagClass, int iTagNumber) { if(iTagNumber < 0 || iTagNumber > 0x1fffffff) return 0xffffffff; else return iTagClass << 30 | iTagNumber; } CASN1Tag::~CASN1Tag() { } int CASN1Tag::TagClass(int i) { return (unsigned int)i >> 30;; } int CASN1Tag::TagNumber(int i) { return i & 0x1fffffff; } String CASN1Tag::toString(int i) { int j = TagClass(i); int k = TagNumber(i); if(j == 0) { if(k < sizeof(TAG_NAMES) / sizeof(TAG_NAMES[0])) { char r[40]; _snprintf(r, 40, "UNIVERSAL[%s]", TAG_NAMES[k].c_str()); return r; } else { char r[40]; _snprintf(r, 40, "UNIVERSAL[%d]", k); return r; } } else { char r[40]; _snprintf(r, 40, "%s[%d]", CLASS_NAMES[j].c_str(), k); return r; } }}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -