Hex 编码(十六进制编码)是一种将数据表示为十六进制数字的编码方式。它常用于表示二进制数据、颜色值、内存地址和其他低级数据格式。
Hex 编码基础
-
十六进制数:
- 使用 16 个字符表示数字:
0-9
和A-F
。 - 每个十六进制数字占 4 位二进制位(bits)。
- 例如:
A
表示10
,F
表示15
。
- 使用 16 个字符表示数字:
-
字节表示:
- 一个字节(8 位)可以用两个十六进制字符表示。
- 例如:字节
11001100
用十六进制表示为CC
。
Hex 编码的用途
-
颜色表示:
- 如
#FF5733
,每两位(FF
、57
、33
)表示红、绿、蓝的强度。
- 如
-
网络通信:
- 数据以十六进制形式查看和调试。
-
字符串编码:
- 将字符串转换成 Hex 表示便于存储或传输。
-
加密和哈希:
- 加密算法(如 MD5、SHA)通常输出十六进制格式。
编码原理
将原始数据(如字符串)转换成二进制,再用十六进制表示。
示例:将字符串转换为 Hex
假设字符串为 "Hi"
,它的编码流程如下:
- 每个字符用 ASCII 值表示:
H
的 ASCII 值是72
。i
的 ASCII 值是105
。
- 转换为二进制:
H
->01001000
i
->01101001
- 转换为十六进制:
H
->48
(0100
是4
,1000
是8
)i
->69
(0110
是6
,1001
是9
)
- 最终结果是:
48 69
编码和解码示例(JavaScript 实现)
将字符串编码为 Hex
function stringToHex(str) {
return Array.from(str) // 将字符串拆成字符数组
.map((char) => char.charCodeAt(0).toString(16)) // 每个字符转为 ASCII 后转为 Hex
.join(' '); // 合并成字符串
}
console.log(stringToHex("Hi")); // 输出:48 69
将 Hex 解码为字符串
function hexToString(hex) {
return hex.split(' ') // 按空格拆分 Hex 字符串
.map((byte) => String.fromCharCode(parseInt(byte, 16))) // 每个 Hex 转为十进制,再转字符
.join(''); // 合并成字符串
}
console.log(hexToString("48 69")); // 输出:Hi
完整示例:编码与解码
const text = "Hello, Hex!";
// 编码为 Hex
function stringToHex(str) {
return Array.from(str)
.map((char) => char.charCodeAt(0).toString(16).padStart(2, '0')) // 确保每个字节至少两位
.join(' ');
}
// 从 Hex 解码
function hexToString(hex) {
return hex.split(' ')
.map((byte) => String.fromCharCode(parseInt(byte, 16)))
.join('');
}
const encoded = stringToHex(text);
console.log("Hex 编码:", encoded); // Hex 编码: 48 65 6c 6c 6f 2c 20 48 65 78 21
const decoded = hexToString(encoded);
console.log("解码为字符串:", decoded); // 解码为字符串: Hello, Hex!
Hex 编码与 Base64 的区别
- Hex 编码:
- 表示数据为十六进制数字。
- 每个字节用两个字符表示,数据量较大。
- Base64 编码:
- 使用 64 个字符表示数据。
- 数据量比 Hex 更紧凑,但不如 Hex 直观。