巩义做网站,wordpress用手机qq微信微博,沈阳网络seo公司,wordpress可视化编辑器 windows字符占用字节数解析
1. 英文字符
ASCII 编码#xff1a;1字节 (8比特) 示例#xff1a;A → 二进制 01000001 UTF-8 编码#xff1a;1字节 (8比特) 兼容 ASCII 的英文字符仍占1字节
2. 中文字符
编码类型字节数比特数示例GBK/GB23122字节16比特中 → 0xD6 0xD0UTF-83字…
字符占用字节数解析
1. 英文字符
ASCII 编码1字节 (8比特) 示例A → 二进制 01000001 UTF-8 编码1字节 (8比特) 兼容 ASCII 的英文字符仍占1字节
2. 中文字符
编码类型字节数比特数示例GBK/GB23122字节16比特中 → 0xD6 0xD0UTF-83字节24比特中 → 0xE4 0xB8 0xADUTF-162字节16比特中 → 0x4E 0x2D 特殊说明少数生僻汉字在 UTF-8 中占4字节如 → 0xF0 0xA0 0x80 0x80 BER 编码解析
原始数据 [0x06, 0x08, 0x2B, 0x06, 0x01, 0x02, 0x01, 0x01, 0x01, 0x00] 对应 OID 1.3.6.1.2.1.1.1.0
BER 解码步骤 #mermaid-svg-GphoW4ZdgofAL4KN {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GphoW4ZdgofAL4KN .error-icon{fill:#552222;}#mermaid-svg-GphoW4ZdgofAL4KN .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-GphoW4ZdgofAL4KN .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-GphoW4ZdgofAL4KN .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-GphoW4ZdgofAL4KN .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-GphoW4ZdgofAL4KN .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-GphoW4ZdgofAL4KN .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-GphoW4ZdgofAL4KN .marker{fill:#333333;stroke:#333333;}#mermaid-svg-GphoW4ZdgofAL4KN .marker.cross{stroke:#333333;}#mermaid-svg-GphoW4ZdgofAL4KN svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-GphoW4ZdgofAL4KN .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-GphoW4ZdgofAL4KN .cluster-label text{fill:#333;}#mermaid-svg-GphoW4ZdgofAL4KN .cluster-label span{color:#333;}#mermaid-svg-GphoW4ZdgofAL4KN .label text,#mermaid-svg-GphoW4ZdgofAL4KN span{fill:#333;color:#333;}#mermaid-svg-GphoW4ZdgofAL4KN .node rect,#mermaid-svg-GphoW4ZdgofAL4KN .node circle,#mermaid-svg-GphoW4ZdgofAL4KN .node ellipse,#mermaid-svg-GphoW4ZdgofAL4KN .node polygon,#mermaid-svg-GphoW4ZdgofAL4KN .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-GphoW4ZdgofAL4KN .node .label{text-align:center;}#mermaid-svg-GphoW4ZdgofAL4KN .node.clickable{cursor:pointer;}#mermaid-svg-GphoW4ZdgofAL4KN .arrowheadPath{fill:#333333;}#mermaid-svg-GphoW4ZdgofAL4KN .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-GphoW4ZdgofAL4KN .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-GphoW4ZdgofAL4KN .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-GphoW4ZdgofAL4KN .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-GphoW4ZdgofAL4KN .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-GphoW4ZdgofAL4KN .cluster text{fill:#333;}#mermaid-svg-GphoW4ZdgofAL4KN .cluster span{color:#333;}#mermaid-svg-GphoW4ZdgofAL4KN div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-GphoW4ZdgofAL4KN :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} BER编码 分解TLV结构 类型Tag 长度Length 值Value 1. 分解 TLV 结构
部分字节含义Tag0x06对象类型OBJECT IDENTIFIERLength0x08值域长度8字节Value0x2B 0x06 0x01 0x02 0x01 0x01 0x01 0x00OID 编码值
2. OID 值域解码
# OID 编码规则
# 第一段 (X * 40) Y
# 后续段Base128 变长编码最高位1表示继续value [0x2B, 0x06, 0x01, 0x02, 0x01, 0x01, 0x01, 0x00]# 步骤1解码前两个数字
first_byte 0x2B # 43
x first_byte // 40 # 43 ÷ 40 1
y first_byte % 40 # 43 % 40 3
→ 得到 1.3# 步骤2直接解码单字节数字
0x06 → 6
0x01 → 1
0x02 → 2
0x01 → 1
0x01 → 1
0x01 → 1
0x00 → 0# 最终OID1.3.6.1.2.1.1.1.03. 完整解码过程
字节二进制解码规则结果数字0x2B00101011(X*40)YX1, Y3 → 1.30x0600000110直接取值60x0100000001直接取值10x0200000010直接取值20x0100000001直接取值10x0100000001直接取值10x0100000001直接取值10x0000000000直接取值0 最终 OID1.3.6.1.2.1.1.1.0 为什么这样设计
1. 编码优化目标
最小化空间使用变长编码压缩大数字快速解码单字节直接取值无需计算兼容性支持无限长的 OID
2. 特殊规则说明 前两段合并因 OID 前两段范围有限0≤X≤2, 0≤Y≤39可用1字节表示 取值范围 0 到 (2*40 39) 119
实际最大值X2时Y无上限但标准定义Y40大数字处理本例未涉及 # 示例数字 30000 的编码
30000 的二进制: 1 1101010 0110000
分组7位一组: [1, 1101010, 0110000]
添加最高位: 0b11101010 → 0xEA (最高位1表示继续)0b00110000 → 0x30 (最高位0结束)
最终编码: [0xEA, 0x30]编码验证工具
使用 Python 验证编码
from pyasn1.type import univ
from pyasn1.codec.ber import encoder# 定义 OID 对象
oid univ.ObjectIdentifier(1.3.6.1.2.1.1.1.0)# BER 编码
ber_encoded encoder.encode(oid)
print(list(ber_encoded))
# 输出: [6, 8, 43, 6, 1, 2, 1, 1, 1, 0] (即十六进制 06 08 2B 06 01 02 01 01 01 00)总结 字符占用 英文1字节ASCII/UTF-8中文2字节GBK或 3字节UTF-8 OID BER 编码 TLV 结构Type(1B) Length(1B) Value(NB)值域规则 前两段合并为 40*X Y后续段直接单字节取值值128时大数字使用 Base128 变长编码最高位为延续标志 示例解码 [0x06, 0x08, 0x2B, 0x06, 0x01, 0x02, 0x01, 0x01, 0x01, 0x00]
→ TagOID, Length8, Value1.3.6.1.2.1.1.1.0