编码
通信领域常用编码
脉冲
类似于人的脉搏,主要特性参数有波形幅度和重复频率
电话拨号编码
1-9 分别使用 1-9 个脉冲,0 则表示使用 10 个脉冲
Morse编码 (摩斯电码)
最多6位 也可以使用01串表示
敲击码
使用点击声音来命名编码
TapCode | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
1 | A | B | C/K | D | E |
2 | F | G | H | I | J |
3 | L | M | N | O | P |
4 | Q | R | S | T | U |
5 | V | W | X | Y | Z |
曼彻斯特编码
又称自同步码,相位编码,有两种编码方式:
都用电压的变化来分辨0和1
-
从高电平到低电平的跳变代表1,而从低电平到高电平的跳变代表0(as per G.E.Tomas编码方式)
-
从高电平到低电平的跳变代表0,而从低电平到高电平的跳变代表1(as per IEEE 802.3编码方式)
(根据802.3中规定编码方式)从接收的编码位中提取原始数据:
而G.E. Thomas方式与之正好相反
格雷编码
是一种在相邻数值之间只有一个位变化的二进制编码方式
例如,n=2时的格雷码序列是:00, 01, 11, 10。可以看到,从00到01,从01到11,以及从11到10,每次都只有一个位发生了变化
以二进制为0值的格雷码为第零项,第一项改变最右边的位元,第二项改变右起第一个为1的位元的左边位元,第三、四项方法同第一、二项,如此反复,即可排列出n个位元的格雷码。
二进制转格雷码 自低位至高位运算即可,无需考虑进位
计算机相关的编码
ACSCII编码
可见字符
- 0-9, 48-57
- A-Z, 65-90
- a-z, 97-122
ASCII值 | 控制字符 | ASCII值 | 控制字符 | ASCII值 | 控制字符 | ASCII值 | 控制字符 |
---|---|---|---|---|---|---|---|
0 | NUT | 32 | (space) | 64 | @ | 96 | 、 |
1 | SOH | 33 | ! | 65 | A | 97 | a |
2 | STX | 34 | " | 66 | B | 98 | b |
3 | ETX | 35 | # | 67 | C | 99 | c |
4 | EOT | 36 | $ | 68 | D | 100 | d |
5 | ENQ | 37 | % | 69 | E | 101 | e |
6 | ACK | 38 | & | 70 | F | 102 | f |
7 | BEL | 39 | , | 71 | G | 103 | g |
8 | BS | 40 | ( | 72 | H | 104 | h |
9 | HT | 41 | ) | 73 | I | 105 | i |
10 | LF | 42 | * | 74 | J | 106 | j |
11 | VT | 43 | + | 75 | K | 107 | k |
12 | FF | 44 | , | 76 | L | 108 | l |
13 | CR | 45 | - | 77 | M | 109 | m |
14 | SO | 46 | . | 78 | N | 110 | n |
15 | SI | 47 | / | 79 | O | 111 | o |
16 | DLE | 48 | 0 | 80 | P | 112 | p |
17 | DCI | 49 | 1 | 81 | Q | 113 | q |
18 | DC2 | 50 | 2 | 82 | R | 114 | r |
19 | DC3 | 51 | 3 | 83 | S | 115 | s |
20 | DC4 | 52 | 4 | 84 | T | 116 | t |
21 | NAK | 53 | 5 | 85 | U | 117 | u |
22 | SYN | 54 | 6 | 86 | V | 118 | v |
23 | TB | 55 | 7 | 87 | W | 119 | w |
24 | CAN | 56 | 8 | 88 | X | 120 | x |
25 | EM | 57 | 9 | 89 | Y | 121 | y |
26 | SUB | 58 | : | 90 | Z | 122 | z |
27 | ESC | 59 | ; | 91 | [ | 123 | { |
28 | FS | 60 | < | 92 | \ | 124 | | |
29 | GS | 61 | = | 93 | ] | 125 | } |
30 | RS | 62 | > | 94 | ^ | 126 | ` |
31 | US | 63 | ? | 95 | _ | 127 | DEL |
ASCII 字符偏移
字符移位
字符移位是在对应范围之内移位 ,如大写字母在大写字母范围之内移动,超过 z
从头开始移动
public static void main(String[] args){
char m = 'M';
int n = 20;
//[字符+数字]直接输出是数字
System.out.println(m+n);//97
System.out.println((char)(a+m));//a
if(m+n > 'Z'){
//此处相当于97>90
m = (char)(m-(26-n));//此处注意一定要加(char),否则会产生类型错误(返回数字)
}
System.out.println(m);//G
}
数字移动同理
补全感叹号对应的内容(2018 DEFCON Quals ghettohackers: Throwback)
题目
Anyo!e!howouldsacrificepo!icyforexecu!!onspeedthink!securityisacomm!ditytop!urintoasy!tem!
利用感叹号来分割字符
长度为一的字符串对应字母 a,长度为2的字符串对应字母 b,以此类推,当然 字符串长度为 0,对应空格
ori ='Anyo!e!howouldsacrificepo!icyforexecu!!onspeedthink!securityisacomm!ditytop!urintoasy!tem!'
sp = ori.split('!')
print repr(''.join(chr(97 + len(s) - 1) for s in sp))
//输出
dark logic
二进制编码
0 1
十六进制编码
0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F
C 中的十六进制是在数字前面加上 0X
来表示,例:12AF
在 C 中表示为 0X12AF
十六进制转二进制
每位十六进制用 4 位二进制来表示
十六进制转十进制
16进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方…
例子:2AF5
第0位:
第1位:
第2位:
第3位:
直接计算就是:
Base编码
base xx 中的 xx 表示的是采用多少个字符进行编码
- base64结尾可能会有
=
号,但最多有 2 个 - base32 结尾可能会有
=
号,但最多有 6 个 - 有可能需要自己加等号
- = 也就是 3D
base64
比如说 base64 就是采用以下 64 个字符编码,由于 2 的 6 次方等于 64,所以每 6 个比特为一个单元,对应某个可打印字符。
3 个字节就有 24 个比特,对应于 4 个 Base64 单元,即 3 个字节需要用 4 个可打印字符来表示。
例:Man
如果要编码的字节数不能被3整除,最后会多出1个或2个字节,可以使用0字节在末尾补足,使其能够被3整除,在进行 Base64 编码,在编码后的 base64 文本后加上一个或两个 =
号,代表补足的字节数
也就是说,当最后剩余一个八位字节(一个 byte)时,最后一个 6 位的 base64 字节块有四位是 0 值,最后附加上两个等号;如果最后剩余两个八位字节(2 个 byte)时,最后一个 6 位的 base 字节块有两位是 0 值,最后附加一个等号
base32
使用32个可见字符进行编码,5个 bit 为1个分组
5字节是40 bit ,对应着8个 base32 分组
当出现不足 5 字节时,最第一个不足 5 bit 进行补位(用0补位)后面剩余的部分用 = 填充,知道补满5字节
base32 最多6个 =
霍夫曼编码
又称哈夫曼编码,赫夫曼编码
哈夫曼编码首先会使用字符的频率创建一棵树,然后通过这个树的结构为每个字符生成一个特定的编码,出现频率高的字符使用较短的编码,出现频率低的则使用较长的编码,这样就会使编码之后的字符串平均长度降低,从而达到数据无损压缩的目的
先计算该字符串出现的频率,按照出现的频率进行排序,出现次数高的在后面
将字符作为叶子节点开始构建一棵树(哈夫曼树称为最优二叉树,一种带权路径长度最短的二叉树)
XXencode
XXencode 将输入文本以每三个字节为单位进行编码
如果最后剩下的资料少于三个字节,不够的部份用零补齐
这三个字节共有 24 个 Bit,以 6bit 为单位分为 4 个组,每个组以十进制来表示所出现的数值只会落在 0 到 63 之间。以所对应值的位置字符代替
URL编码
又称百分号编码
分作保留和未保留字符,保留字符是那些具有特殊含义的字符,未保留则反之
保留字符
先将字符的ascii值用两个16进制数来表示,再在起那面放转义字符 %
,放到URL中
编码后的保留字符 所具有的含义雨编码之前的含义不同
标签:编码,字节,十六进制,16,字符,编码方式 From: https://www.cnblogs.com/Yolololo/p/18595217