Hex 编码(十六进制编码) 【如何编码与解码】

Hex 编码(十六进制编码)是一种将数据表示为十六进制数字的编码方式。它常用于表示二进制数据颜色值内存地址和其他低级数据格式。


Hex 编码基础

  1. 十六进制数

    • 使用 16 个字符表示数字:0-9A-F
    • 每个十六进制数字占 4 位二进制位(bits)。
    • 例如:A 表示 10F 表示 15
  2. 字节表示

    • 一个字节(8 位)可以用两个十六进制字符表示。
    • 例如:字节 11001100 用十六进制表示为 CC

Hex 编码的用途

  1. 颜色表示

    • #FF5733,每两位(FF5733)表示红、绿、蓝的强度。
  2. 网络通信

    • 数据以十六进制形式查看和调试。
  3. 字符串编码

    • 将字符串转换成 Hex 表示便于存储或传输。
  4. 加密和哈希

    • 加密算法(如 MD5、SHA)通常输出十六进制格式。

编码原理

将原始数据(如字符串)转换成二进制,再用十六进制表示。

示例:将字符串转换为 Hex

假设字符串为 "Hi",它的编码流程如下:

  1. 每个字符用 ASCII 值表示:
    • H 的 ASCII 值是 72
    • i 的 ASCII 值是 105
  2. 转换为二进制:
    • H -> 01001000
    • i -> 01101001
  3. 转换为十六进制:
    • H -> 480100410008
    • i -> 690110610019
  4. 最终结果是: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 的区别

  1. Hex 编码
    • 表示数据为十六进制数字。
    • 每个字节用两个字符表示,数据量较大。
  2. Base64 编码
    • 使用 64 个字符表示数据。
    • 数据量比 Hex 更紧凑,但不如 Hex 直观。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值