十六进制 Hex 转换器

纯浏览器本地进行 Hex 十六进制、文本字符串、二进制流与十进制数值互转。深度支持 UTF-8 多字节汉字与 Emoji、字节序反转(大端/小端)、规范化 Hex Dump 内存转储视图与大整数高精度换算。

常用预设:
输入格式:
字节数 (Bytes): 18半字节 (Nibbles): 36比特数 (Bits): 144UTF-8 字符数: 6
字母大小写:
前缀样式:
字节分隔符:
十六进制 (Base 16)0x
E4 BD A0 E5 A5 BD EF BC 8C E4 B8 96 E7 95 8C EF BC 81
文本内容 (UTF-8)字符串
你好,世界!
二进制流 (Base 2)0b
11100100 10111101 10100000 11100101 10100101 10111101 11101111 10111100 10001100 11100100 10111000 10010110 11100111 10010101 10001100 11101111 10111100 10000001
十进制字节 (Base 10)字节流
228 189 160 229 165 189 239 188 140 228 184 150 231 149 140 239 188 129
ASCII 字符排版视图0x00–0x7F
..................
Base64 与八进制扩展多格式
Base64
5L2g5aW977yM5LiW55WM77yB
八进制 (Base 8)
344 275 240 345 245 275 357 274 214 344 270 226 347 225 214 357 274 201

核心控制选项与参数参考

转换模式 (Mode)自由切换连续字节流双向转换、任意大整数跨数制换算或规范化内存转储视图。
前缀表示法 (Prefix)按目标语言定制前缀:C 风格 0x、转义序列 \x、CSS # 或纯 Hex。
字节分隔符 (Separator)支持空格、冒号、逗号、连字符或无缝连续字符输出,适配协议调试与逆向比对。
字节序排列 (Endianness)一键切换大端序(网络传输 Network Order)与小端序(处理器原生 Host Order)。

物理内存中的字节与半字节(Nibble)架构:为什么计算机底层青睐十六进制?

在现代计算机体系结构中,物理硬件能够独立寻址的基本存储单位是 8 位字节(Byte)。直接以二进制(如 10100101_2)审查原始字节序列冗长且极易发生视觉错位与转录误差;而使用十进制(如 165_10)又无法与二进制位边界整齐对应(例如 256 会突增至 3 位数字,破坏定长物理边界)。

十六进制完美化解了这一矛盾,因为 16 是 2 的精确整次幂(2^4 = 16)。任何一个 8 位字节均可自然、对称地等分为两个 4 位半字节(Nibble):

分析维度高 4 位半字节(Bits [7:4])低 4 位半字节(Bits [3:0])完整 8 位物理字节
二进制位模式1010010110100101
按位提取算法(byte >> 4) & 0x0Fbyte & 0x0F(high << 4) | low
十六进制表示A50xA5 (十进制 165)

由于任意单字节均严丝合缝地对应两个十六进制字符(0x00 至 0xFF),十六进制文本保持着精确的 2:1 字符与字节比例关系。在解析网络报文流或底层二进制缓冲区时,任何奇数长度的十六进制片段(例如 "A" 或 "1F4")均意味着缺失了前导高位半字节,需执行左补零("0A"、"01F4")以恢复完整的字节对齐。

字符编码演进:US-ASCII 与 UTF-8 多字节序列映射

文本字符串转为十六进制字节流时,产出结果直接取决于所采用的字符集编码标准。在早期 US-ASCII(ANSI X3.4)标准中,字符仅使用 7 个比特,取值范围为 0x00 至 0x7F,每个字符恒定占用 1 个物理字节。

现代互联网协议统一采用 UTF-8(RFC 3629)标准,这是一种与 ASCII 完全向后兼容的变长编码方案,针对不同区段的 Unicode 码点动态分配 1 至 4 个字节:

字符类别示例字符Unicode 码点UTF-8 字节序列 (Hex)物理字节长度
基础拉丁字母 (ASCII)AU+0041411 字节
拉丁字母扩展 / 重音字符éU+00E9C3 A92 字节
CJK 中日韩统一表意文字字U+5B57E5 AD 973 字节
Emoji 表情符号与增补平面💻U+1F4BBF0 9F 92 BB4 字节

UTF-8 多字节编码拥有严格的二进制前缀规律:2 字节字符首字节以 110xxxxx(0xC0–0xDF)开头;3 字节字符首字节以 1110xxxx(0xE0–0xEF)开头;4 字节字符首字节以 11110xxx(0xF0–0xF7)开头;所有后续的延续字节均严格符合 10xxxxxx(0x80–0xBF)。

常用 ASCII 字符与十六进制 / 二进制速查表标准 7-bit ASCII (0x00–0x7F)

Space (空格)0x20
Dec: 3200100000
!0x21
Dec: 3300100001
"0x22
Dec: 3400100010
#0x23
Dec: 3500100011
$0x24
Dec: 3600100100
%0x25
Dec: 3700100101
&0x26
Dec: 3800100110
00x30
Dec: 4800110000
10x31
Dec: 4900110001
90x39
Dec: 5700111001
@0x40
Dec: 6401000000
A0x41
Dec: 6501000001
B0x42
Dec: 6601000010
C0x43
Dec: 6701000011
M0x4D
Dec: 7701001101
Z0x5A
Dec: 9001011010
a0x61
Dec: 9701100001
b0x62
Dec: 9801100010
m0x6D
Dec: 10901101101
z0x7A
Dec: 12201111010
{0x7B
Dec: 12301111011
}0x7D
Dec: 12501111101
~0x7E
Dec: 12601111110
DEL (删除)0x7F
Dec: 12701111111

字节序(Endianness)与物理内存寻址排列

当在内存中连续存储一个占用多个字节的数值时,各个字节在物理地址上的存放先后顺序即称为字节序(Endianness)。以一个 32 位整型常数 0x12345678 为例,其中 0x12 为最高有效字节(MSB),0x78 为最低有效字节(LSB):

内存寻址排序基地址 + 0 (低地址)基地址 + 1基地址 + 2基地址 + 3 (高地址)核心工业应用场景
大端序 Big-Endian(高位优先)12345678TCP/IP 网络协议头(网络字节序)、Java 虚拟机规范字节码、IBM/Motorola 架构
小端序 Little-Endian(低位优先)78563412x86、x86-64 架构、绝大多数 ARM 芯片(默认运行模式)、RISC-V 处理器

深入理解字节序是进行底层网络通信与逆向分析的基本功:Socket 网络传输固定使用大端序,而运行在 x86/ARM 上的宿主程序在解析报文时,必须通过 ntohl()(Network to Host Long)或 htonl() 函数执行翻转,避免数值被错误逆序读取。

十六进制表示法、前缀与行业排版规范

现代编程语言、网络协议规范与标记语言采用标准化的前缀与定界符,以明确区分十六进制数与常规十进制数值:

表示格式语法正则模式代码示例标准适用范围与技术栈
C 语言风格字面量0x[0-9A-Fa-f]+0x7F, 0xDEADBEEFC、C++、Java、JavaScript、Python、Rust、Go、Swift
字符串单字节转义\x[0-9A-Fa-f]{2}\x1B\x5B\x32\x4A正则表达式、C 风格字节串、终端 ANSI 控制转义序列
CSS 颜色代码#[0-9A-Fa-f]{3,6,8}#3B82F6, #10B98180CSS Color Module Level 3/4、SVG 矢量图、UI 设计软件
HTML / XML 字符实体&#x[0-9A-Fa-f]+;&#x2603; (☃)HTML5 十六进制数字字符引用、XML 实体声明
汇编语言后缀[0-9][0-9A-Fa-f]*h0FFh, 1000hIntel x86 汇编语法体系(NASM、MASM)

系统级按位掩码(Bitmasking)与字节操作速查

系统开发与通信工程师广泛采用十六进制字面量编写按位掩码,因为 2 的整次幂及位域划分在 4 位十六进制边界下具备高度可视化的几何对齐特征:

操作类型Hex 掩码 / 核心表达式按位目标区间工业级工程应用场景
单字节截断 / 提取val & 0xFFBits [7:0]截断 32/64 位整型为无符号单字节,或隔离出最低有效字节 (LSB)
16 位双字节字提取val & 0xFFFFBits [15:0]提取 TCP/UDP 16 位端口号;屏蔽 UTF-16 代理项码元
高半字节提取 (High Nibble)(byte >> 4) & 0x0FBits [7:4]解包 IPv4 首部中的版本号(字节 0 的前半字节固定为 0x4)
低半字节提取 (Low Nibble)byte & 0x0FBits [3:0]提取 IPv4 首部长度(IHL 字段,以 32 位字为单位计)
色彩通道分离(rgba >> 16) & 0xFFBits [23:16]从 32 位 RGBA 像素整数中无损提取绿色通道(0xRRGGBBAA)
缓存行对齐校验(addr & 0x3F) == 0Bits [5:0] == 0校验内存指针是否对齐至 64 字节 CPU 物理缓存行边界

规范化 Hex Dump 内存转储格式解析(hexdump -C / xxd)

软件逆向工程师与安全分析师通过规范化 Hex Dump 视图审查未知二进制载荷。规范化排版将每 16 字节按行编排为结构严谨的三列布局:

00000000 48 65 6c 6c 6f 2c 20 57 6f 72 6c 64 21 0d 0a 00 |Hello, World!...|
00000010 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 |.ELF............|
↑           ↑                        ↑                        ↑
偏移基址    前 8 个 Hex 字节        后 8 个 Hex 字节        ASCII 边栏映射
1. 8 位偏移量基址列以 8 位十六进制地址表示当前行首字节相对于数据源起点的绝对物理偏移索引(0x00000000)。
2. 两个 8 字节 Hex 块每行固定容纳 16 字节,中间以双空格整齐切分为两个 8 字节半行,极大地提升了眼部跨列扫描定位速度。
3. ASCII 可打印文本边栏可打印字符(0x20–0x7E)直接渲染原字符;非打印控制字符则以点号(.)安全占位。

常见二进制文件签名(魔数 Magic Bytes)参考速查表

操作系统、杀毒引擎与文件解析库通过校验位于文件起始偏移量 0x00 处的魔数特征序列,以准确识别真实文件格式,规避恶意文件伪造扩展名的风险:

文件格式起始魔数特征码 (Hex)ASCII 映射文本技术规范标准
PNG 图像89 50 4E 47 0D 0A 1A 0A. P N G \r \n \x1A \n便携式网络图形规范 (RFC 2083)
JPEG / JFIF 图像FF D8 FF\xFF \xD8 \xFFStart of Image 图像起始标记 (ISO 10918)
GIF 动图47 49 46 38 39 61G I F 8 9 aGraphics Interchange Format 89a 规范
PDF 文档25 50 44 46% P D FAdobe 便携式文档格式 (ISO 32000)
ZIP 归档 / DOCX / JAR50 4B 03 04P K \x03 \x04PKZIP Local File Header 本地文件头
ELF 可执行文件 (Linux)7F 45 4C 46\x7F E L FLinux Executable and Linkable Format
Windows PE 可执行程序4D 5AM ZDOS MZ Header / Windows PE (EXE, DLL)

主流编程语言原生十六进制转换参考实现

以下汇集了企业级生产环境中常用语言标准库处理十六进制编码与解码的核心示例:

TypeScript & Node.js (Buffer / Uint8Array)
// 字符串转十六进制
const hexString = Buffer.from('你好,世界', 'utf-8').toString('hex');
// 产出: "e4bda0e5a5bdeffbc8e4b896e7958c"

// 十六进制逆向解码为 UTF-8 文本
const utf8Text = Buffer.from(hexString, 'hex').toString('utf-8');

// 任意大整数 BigInt 转十六进制
const hexNum = (3735928559n).toString(16).toUpperCase(); // "DEADBEEF"
const parsedInt = BigInt('0x' + hexNum); // 3735928559n
Python 3 (原生 bytes 模块)
# 字符串转十六进制字节流
raw_bytes = "你好,世界".encode("utf-8")
hex_repr = raw_bytes.hex()  # 'e4bda0e5a5bdeffbc8e4b896e7958c'

# 十六进制逆向还原为字符串
decoded = bytes.fromhex(hex_repr).decode("utf-8")

# 大整数与十六进制互转
num_hex = hex(3735928559)  # '0xdeadbeef'
original_num = int("0xdeadbeef", 16)  # 3735928559
Go 语言 (encoding/hex 标准包)
package main

import (
    "encoding/hex"
    "fmt"
)

func main() {
    data := []byte("你好,世界")

    // 字节切片编码为十六进制字符串
    hexEncoded := hex.EncodeToString(data)
    fmt.Println("Hex:", hexEncoded)

    // 十六进制字符串逆向解码
    decodedBytes, err := hex.DecodeString(hexEncoded)
    if err == nil {
        fmt.Println("Decoded:", string(decodedBytes))
    }
}
Unix / Linux 终端 CLI (hexdump 与 xxd)
# 查看二进制文件规范化 Hex Dump 转储
hexdump -C archive.tar.gz | head -n 5

# 使用 xxd 生成可逆向转储文件
xxd binary_payload.bin payload.hex

# 从十六进制转储重建还原二进制原文件
xxd -r payload.hex reconstructed.bin

Frequently Asked Questions

为什么十六进制在计算机底层和数据转储中普遍以“两个字符为一组”显示?

在现代计算机体系结构中,物理可寻址存储的基本单元是 8 位字节(1 Byte = 8 bits)。一个十六进制字符恰好能表示 4 个二进制位(即一个半字节 Nibble),取值范围为 0(0000)到 15(1111 或 0xF)。因此,两个十六进制字符正好可以完整无缝地表达 2 × 4 = 8 位信息,覆盖范围为 0x00(0)至 0xFF(255)。单个独立的奇数位十六进制字符无法构成完整字节,所以在规范的字节流和内存转储中,十六进制数据始终按偶数对(每组 2 字符)对齐显示。

计算机底层如何通过十六进制表示带符号的负数?

计算机底层硬件采用补码(Two's Complement)二进制机制表示带符号整数,而非在内存中存储物理正负号。例如在 8 位有符号整型(int8)中,0xFF 对应十进制数值 -1,0x80 对应 -128,而 0x7F 对应 +127。当将十六进制数值转换为十进制数值时,必须明确目标字长(如 8 位、16 位、32 位或 64 位),以确定最高位符号位(Sign Bit)是按无符号绝对值计算还是按有符号补码进行符号扩展。

十六进制编码字符串与原始二进制数据有何本质区别?传输中会有多大开销?

一个原始二进制字节在存储和内存中仅占用 8 个比特(1 字节)。当将其编码为可打印的十六进制文本(例如 "FF")时,每个字符均需作为独立的 ASCII/UTF-8 字符存储(字符 "F" 对应 ASCII 码 0x46),因此 1 个原始字节会膨胀为 2 个字符(占 2 字节内存)。十六进制编码的核心价值在于将不可打印或易发生网络协议截断的二进制流序列化为人类可读的 ASCII 文本,代价是物理传输与存储体积增加 100%(2 倍膨胀)。

UTF-8 多字节字符编码在底层是如何映射为十六进制字节流的?

标准的 ASCII 字符(Unicode 码点 U+0000 至 U+007F)直接单字节映射为 0x00 至 0x7F。对于超出 ASCII 范围的 Unicode 字符,UTF-8 规范采用 2 至 4 字节的变长字节序列。首字节的前导标志位指示总字节长度(如 0xC0–0xDF 为 2 字节,0xE0–0xEF 为 3 字节,0xF0–0xF7 为 4 字节),后续延续字节均以 10xxxxxx(0x80–0xBF)开头。例如常用中文字符“字”(U+5B57)在 UTF-8 中编码为 3 个十六进制字节:E5 AD 97;欧元符号“€”编码为 E2 82 AC;Emoji“💻”(U+1F4BB)则编码为 4 字节:F0 9F 92 BB。

大端序(Big-Endian)与小端序(Little-Endian)在工程实践中应如何选用?

大端序(Big-Endian)将最高有效字节(MSB)存放在低内存地址端,符合人类从左至右的常规阅读习惯,是 TCP/IP 网络协议族的标准数据传输格式(网络字节序 Network Byte Order)。小端序(Little-Endian)则将最低有效字节(LSB)存放在低内存地址端,是 x86、x86-64 以及大部分现代 ARM 处理器(主机字节序 Host Byte Order)的原生执行模式。在解析跨网络通信数据包或直接分析底层物理内存转储时,必须根据上下文匹配正确的字节序,以避免数值高低位倒置。

CSS 中的颜色 Hex 代码为什么会有 3 位、6 位与 8 位长度的区别?

CSS 十六进制颜色值与 sRGB 色彩空间通道直接对应。标准的 6 位代码(#RRGGBB)分别为红、绿、蓝三个色彩通道分配各两个十六进制字符(00–FF,对应 0–255 亮度阶次)。8 位代码(#RRGGBBAA)在尾部追加 2 位的 Alpha 透明度通道。而 3 位(#RGB)和 4 位(#RGBA)属于紧凑缩写形式:解析器在渲染时会自动将每个字符复制扩展为双字符(例如 #F5A 将等价展开为 #FF55AA,#369C 展开为 #336699CC),适用于各颜色分量高低半字节相同的高效压缩场景。

规范化 Hex Dump 内存转储与连续 Hex 字符串相比有哪些工程优势?

连续无格式的十六进制字符串缺乏空间定位与结构上下文。规范化 Hex Dump(例如 Linux 下 `hexdump -C` 或 `xxd` 命令输出)将数据按行排版为严谨的三列布局:左侧为 8 位十六进制基地址偏移量(Offset),中间为分成两组、每行 16 字节的 Hex 编码区,右侧为对应的 ASCII 可视化边栏(不可打印字符以点号 . 代替)。这种结构便于逆向分析、协议解析与系统调试人员快速对齐字节索引与可读文本。

输入包含奇数个十六进制字符或空格分隔符时,转换器如何处理?

在严格的字节流解析规范下,每个字节必须由高 4 位与低 4 位构成,因此奇数长度的 Hex 字符串(如 "A" 或 "1F4")缺少低位或高位半字节配对。工业级解析器通常采用自动左补零(例如 "A" 视为 "0A","1F4" 规范化为 "01F4")或提示语法告警。本工具在解析时会自动智能滤除常见前缀(0x、\x、#)与分隔符(空格、逗号、冒号、连字符),确保脏数据与排版符号不影响核心字节的精准提取。