【C】十六进制(Hex)与ASCII
十六进制(Hex)与ASCII的关系
十六进制(Hexadecimal)和ASCII(American Standard Code for Information Interchange)是两种不同的编码方式,但它们可以相互转换,用于表示字符或数据。
1. ASCII码:字符的数字化表示
ASCII 是一种字符编码标准,用 7位二进制数(0~127) 表示英文字母、数字、标点符号和控制字符(如换行、退格)。
- 可打印字符:例如
A
→65
(十进制),a
→97
。 - 控制字符:例如
换行(LF)
→10
,回车(CR)
→13
。
ASCII码表(部分)
字符 | 十进制 | 十六进制 | 二进制 |
---|---|---|---|
A | 65 | 0x41 | 01000001 |
a | 97 | 0x61 | 01100001 |
0 | 48 | 0x30 | 00110000 |
! | 33 | 0x21 | 00100001 |
2. 十六进制:更紧凑的二进制表示
十六进制(Hex)是二进制的一种简写形式,每 4位二进制 对应 1位十六进制(0~9, A~F)。
- 为什么用十六进制?
- 二进制(如
01000001
)太长,十六进制(0x41
)更易读。 - 计算机底层数据(如内存地址、机器码)通常用十六进制表示。
- 二进制(如
二进制 ↔ 十六进制转换
二进制 | 十六进制 |
---|---|
0000 | 0 |
0101 | 5 |
1010 | A |
1111 | F |
3. 十六进制与ASCII的转换
(1)ASCII字符 → 十六进制
例如字符 'A'
:
- 查ASCII表:
A
→ 十进制65
。 - 十进制转十六进制:
65
→0x41
。
(2)十六进制 → ASCII字符
例如 0x61
:
- 十六进制转十进制:
0x61
→97
。 - 查ASCII表:
97
→ 字符'a'
。
4. 实际应用示例
案例1:字符串 "Hello"
的十六进制表示
字符 | ASCII十进制 | 十六进制 |
---|---|---|
H | 72 | 0x48 |
e | 101 | 0x65 |
l | 108 | 0x6C |
l | 108 | 0x6C |
o | 111 | 0x6F |
十六进制序列:0x48 0x65 0x6C 0x6C 0x6F
→ "Hello"
。
5. 扩展知识
(1)Unicode 和 UTF-8
- ASCII 只能表示128个字符,而 Unicode(如UTF-8)扩展了字符集(支持中文、emoji等)。
- UTF-8 中,一个字符可能占用 1~4个字节(十六进制表示更长)。
(2)计算机中的存储
- 内存中的数据(如文本、图片)最终都以 二进制 存储,但调试时常用 十六进制 显示(如
0xDEADBEEF
)。
(3)编程中的使用
- C语言:
char c = 0x41;
(等价于char c = 'A';
)。 - Python:
bytes.fromhex("48656C6C6F")
→b"Hello"
。
总结
- ASCII 是字符的数字编码(如
A
→65
)。 - 十六进制 是二进制的紧凑表示(如
65
→0x41
)。 - 转换关系:
字符 ↔ 十进制 ↔ 十六进制 ↔ 二进制 - 应用场景:网络协议、文件解析、逆向工程、嵌入式调试等。