ASCII 编解码
字符/数字/Hex 互转
ASCII 速查表(可打印字符 32-126)
说明
· ASCII(7 位):0-127 涵盖英文字母 / 数字 / 标点 / 控制字符
· 控制字符:0-31 + 127 不可打印(如 \n=10, \t=9, ESC=27)
· 扩展 ASCII:128-255 各厂家定义不同(CP1252 / Latin-1 / GBK 第一字节)
· 中文字符:超出 ASCII 范围,需用 UTF-8 多字节编码(建议改用 Unicode 转换)
关于本工具
了解工具定位 · 使用场景 · 对比优势
使用场景
密码明文检查
安全审计人员在检查弱口令时,常遇到密码以 Hex 或十进制形式存储的日志文件。本工具一键将 Hex 或十进制数字串转为可读字符,快速识别出 'admin123' 或 'password' 等弱密码,无需手动查表或写脚本,提升审计效率。
串口调试排错
嵌入式工程师调试串口通信时,接收到的原始数据往往是 16 进制字节流(如 '48 65 6C 6C 6F')。本工具直接将 Hex 序列转为 ASCII 字符,快速判断发送端是否编码正确、接收端是否丢包,省去在调试器里逐个查 ASCII 码表的麻烦。
网络协议抓包分析
网络运维人员在 Wireshark 中看到 HTTP 请求的 payload 以 Hex 形式显示,需要确认其中是否包含敏感明文。本工具将 Hex 块批量转为 ASCII 字符串,一眼看出 'username=admin&password=123456' 等明文参数,辅助快速定位安全漏洞。
游戏 Mod 文本提取
游戏 Mod 制作者修改老游戏的本地化文件时,常遇到字符以十进制 ASCII 码(如 '72 101 108 108 111')存储的配置表。本工具将数字序列批量转回可读字符,快速定位待翻译的文本位置,无需安装专用编辑器即可完成初步提取。
编程教学演示
计算机教师在讲解字符编码基础时,需要向学生展示字符 'A' 在内存中实际存储为十进制 65、Hex 0x41 的过程。本工具支持字符 ↔ 数字 ↔ Hex 三向互转,学生输入任意字符即可实时观察编码对应关系,比纯理论讲解更直观。
对比矩阵本工具 vs 竞品 vs 传统方法
| 维度 | 本工具 | 竞品 A (browserling.com) | 传统方法 (编程/命令行) |
|---|---|---|---|
| 数据隐私 | 纯浏览器计算,字符不上传服务器 | 需将文本粘贴到网页并提交至服务器处理 | 本地运行脚本,数据不离开本机 |
| 处理速度 | 毫秒级,输入即出结果 | 秒级,受网络延迟和服务器负载影响 | 秒级至分钟级,取决于脚本编写和执行环境启动速度 |
| 离线可用 | 完全离线,加载后断网仍可用 | 必须在线,依赖远程服务器 | 需提前安装 Python/Node.js 等环境,配置后离线可用 |
| 批量处理 | 单次输入,无批量文件处理 | 支持粘贴多行文本,但无文件上传 | 通过脚本可处理任意大小文件,支持管道和循环 |
| 使用门槛 | 零门槛,打开即用 | 低门槛,无需安装,但需访问外网 | 高门槛,需掌握命令行和编程基础 |
| 编码格式支持 | ASCII (0-127) 字符与十进制、十六进制互转 | 支持 ASCII、Unicode、Base64 等多种编码 | 通过 Python `ord()`/`chr()` 等函数可灵活处理任意编码 |
| 平台依赖 | 任何现代浏览器,跨平台 | 任何现代浏览器,跨平台 | 需安装特定编程语言运行时环境 |
使用指南
上手步骤 · 输入输出 · 避坑提示
输入输出示例8 个典型场景,覆盖常规、边界与易错
| 输入 | 输出 | 说明 |
|---|---|---|
| A | 十进制:65 十六进制:0x41 二进制:01000001 | 典型场景:大写字母 A 的 ASCII 值 |
| a | 十进制:97 十六进制:0x61 二进制:01100001 | 典型场景:小写字母 a,注意与 A 区别 |
| 0 | 十进制:48 十六进制:0x30 二进制:00110000 | 典型场景:数字字符 '0',非数值 0 |
| 65 | 字符:A | 典型场景:十进制数字解码为字符 |
| 0x41 | 字符:A | 边界 case:十六进制格式输入解码 |
| 十进制:32 十六进制:0x20 二进制:00100000 | 边界 case:空格字符(不可见) | |
| 你 | 字符超出 ASCII 范围(0-127) | 易错 case:中文字符不在 ASCII 编码内 |
| 128 | 数值超出 ASCII 范围(0-127) | 易错 case:用户输入超出编码范围的数值 |
常见错误对照7 个常踩的坑 · 错误 → 修复
1. 用 ASCII 编解码处理中文
输入「你好」→ 期望得到「你好」或「20320, 22909」输入「Hello」→ 得到「72, 101, 108, 108, 111」或「48 65 6C 6C 6F」ASCII 只定义 0-127(英文字母、数字、标点);中文 Unicode 码点 > 127,需用 UTF-8 / Unicode 工具处理
2. 混淆十进制与十六进制输出
输入「A」→ 期望输出「65」但看到「41」时误以为工具出错确认当前输出模式:十进制选「Dec」/「Numeric」,十六进制选「Hex」/「0x41」ASCII 中 'A' 的十进制是 65,十六进制是 0x41;工具默认显示模式不同会导致结果看起来不一致
3. 输入包含不可见控制字符(\n \t)
从文本编辑器复制「A\nB」→ 期望得到「65, 10, 66」但只看到「65, 66」手动输入「A」后按回车键再输入「B」,或明确在输入框中写入换行符(如 \n)ASCII 0-31 是控制字符(NUL、LF、CR 等);换行符(LF=10)在复制粘贴时容易被编辑器过滤或合并
4. 输入带空格分隔的十六进制字符串时格式不统一
输入「41 42 43」→ 期望解码为「ABC」,但输入「414243」→ 解码为「ABC」也成功,导致混淆统一使用空格分隔每个字节:输入「41 42 43」;或统一无分隔:输入「414243」工具通常支持无分隔和空格分隔两种 Hex 输入,但混用(如「41 4243」)可能被解析为 0x41 0x42 0x43 或报错
5. 把 ASCII 编解码当加密工具用
将「Hello」编码成「72 101 108 108 111」后发给别人,以为这是加密用 AES / RSA / Base64 等加密算法;ASCII 编解码仅用于数据传输或显示调试ASCII 编码是公开的 1:1 映射(A→65),无密钥、无混淆,任何人都能直接反向解码,毫无安全性
6. 输入超出 ASCII 范围的数字
输入「200」→ 期望解码为某个字符,但工具报错或输出空输入「65」→ 得到「A」;输入「128」→ 工具应提示「超出 ASCII 范围(0-127)」ASCII 标准只定义 0-127;128-255 属于扩展 ASCII(非标准),不同系统/编码表(如 CP437、Latin-1)映射不同
7. 误以为解码时输入必须用逗号分隔
输入「72,101,108,108,111」→ 期望解码为「Hello」,但工具只支持空格分隔输入「72 101 108 108 111」→ 得到「Hello」;或先查看工具说明是否支持逗号分隔不同工具对十进制数字的分隔符要求不同(空格、逗号、换行);本工具默认用空格分隔
工作原理
公式推导 · 流程图解 · 依据出处
核心公式
char_code = ord(c) # 字符 → 十进制 hex_code = hex(ord(c)) # 字符 → 十六进制 char = chr(d) # 十进制 → 字符
变量说明
c— 单个字符(如 'A'、'a'、'0')d— 十进制整数(0–127 或 0–255)char_code— 字符对应的十进制 ASCII 码hex_code— 字符对应的十六进制表示(如 0x41)
示例
输入字符 'A':ord('A') = 65 → 十进制 65;hex(65) = '0x41' → 十六进制 41。反向:chr(65) = 'A'。输入十六进制 '41':int('41', 16) = 65 → chr(65) = 'A'。
适用范围
基于 ASCII 标准(ANSI X3.4-1968 / RFC 20),适用于 0–127 标准 ASCII 字符。扩展 ASCII(128–255)依赖具体编码(如 ISO-8859-1),不同系统结果可能不一致。非 ASCII 字符(如中文、Emoji)需用 Unicode 编码,本工具不适用。
原理图
开发者集成
3 种主流语言 · 复制即用
import sys
# 字符 → ASCII 码(十进制)
def char_to_ascii(char: str) -> int:
if len(char) != 1:
raise ValueError("输入必须为单个字符")
return ord(char)
# ASCII 码(十进制)→ 字符
def ascii_to_char(code: int) -> str:
if not (0 <= code <= 127):
raise ValueError("ASCII 码范围 0-127")
return chr(code)
# 字符 → 十六进制
def char_to_hex(char: str) -> str:
return hex(ord(char))[2:].upper()
# 十六进制 → 字符
def hex_to_char(hex_str: str) -> str:
return chr(int(hex_str, 16))
if __name__ == "__main__":
# 示例:字符 'A' 的 ASCII 码和十六进制
c = 'A'
print(f"'{c}' → ASCII: {char_to_ascii(c)}, Hex: {char_to_hex(c)}")
# 输出: 'A' → ASCII: 65, Hex: 41
# 示例:ASCII 码 65 还原为字符
print(f"65 → '{ascii_to_char(65)}'")
# 输出: 65 → 'A'
# 示例:十六进制 '41' 还原为字符
print(f"0x41 → '{hex_to_char('41')}'")
# 输出: 0x41 → 'A'package main
import (
"fmt"
"strconv"
)
// charToASCII 返回字符的十进制 ASCII 码
func charToASCII(c rune) int {
return int(c)
}
// asciiToChar 将十进制 ASCII 码转为字符
func asciiToChar(code int) (string, error) {
if code < 0 || code > 127 {
return "", fmt.Errorf("ASCII 码超出 0-127 范围: %d", code)
}
return string(rune(code)), nil
}
// charToHex 返回字符的十六进制表示(大写)
func charToHex(c rune) string {
return fmt.Sprintf("%X", int(c))
}
// hexToChar 将十六进制字符串转为字符
func hexToChar(hexStr string) (string, error) {
code, err := strconv.ParseInt(hexStr, 16, 32)
if err != nil {
return "", fmt.Errorf("无效的十六进制: %s", hexStr)
}
if code < 0 || code > 127 {
return "", fmt.Errorf("十六进制值超出 ASCII 范围: %s", hexStr)
}
return string(rune(code)), nil
}
func main() {
// 示例:字符 'A' 的 ASCII 码和十六进制
c := 'A'
fmt.Printf("'%c' → ASCII: %d, Hex: %s\n", c, charToASCII(c), charToHex(c))
// 输出: 'A' → ASCII: 65, Hex: 41
// 示例:ASCII 码 65 还原为字符
ch, _ := asciiToChar(65)
fmt.Printf("65 → '%s'\n", ch)
// 输出: 65 → 'A'
// 示例:十六进制 '41' 还原为字符
ch2, _ := hexToChar("41")
fmt.Printf("0x41 → '%s'\n", ch2)
// 输出: 0x41 → 'A'
}// 字符 → ASCII 码(十进制)
function charToASCII(char) {
if (char.length !== 1) {
throw new Error('输入必须为单个字符');
}
return char.charCodeAt(0);
}
// ASCII 码(十进制)→ 字符
function asciiToChar(code) {
if (code < 0 || code > 127) {
throw new Error('ASCII 码范围 0-127');
}
return String.fromCharCode(code);
}
// 字符 → 十六进制(大写)
function charToHex(char) {
return char.charCodeAt(0).toString(16).toUpperCase();
}
// 十六进制 → 字符
function hexToChar(hexStr) {
const code = parseInt(hexStr, 16);
if (isNaN(code) || code < 0 || code > 127) {
throw new Error('无效的十六进制值');
}
return String.fromCharCode(code);
}
// 示例
const c = 'A';
console.log(`'${c}' → ASCII: ${charToASCII(c)}, Hex: ${charToHex(c)}`);
// 输出: 'A' → ASCII: 65, Hex: 41
console.log(`65 → '${asciiToChar(65)}'`);
// 输出: 65 → 'A'
console.log(`0x41 → '${hexToChar('41')}'`);
// 输出: 0x41 → 'A'常见问题
7 个高频疑问
输入大写字母 A,为什么解码出来是 65 而不是 97?
我输入了汉字'中',为什么工具没反应或者乱码?
把 'Hello' 编码成十进制,再粘贴回去解码,怎么变成 'Hello' 前面多了个空格?
在线 ASCII 编解码工具那么多,你这个跟别的比有什么不一样?
我输入了 128,解码出来是空白的,这是工具坏了吗?
为什么输入 'A' 编码结果是 '065' 而不是 '65'?这个前面的 0 是哪里来的?
我有一串十六进制码 '48656C6C6F',怎么转成英文?
相关工具
「Unicode / Hex」下的其他工具