ASCII 编解码

字符/数字/Hex 互转

933 次访问

ASCII 编码转换

输入
输出

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 编码,本工具不适用。

原理图

用户输入字符 / 数字 / Hex浏览器内计算JavaScript 本地处理展示结果ASCII / 数字 / Hex示例流程输入字符 'A' → 浏览器内查 ASCII 表 → 输出 65 (十进制) / 0x41 (十六进制)输入数字 65 → 浏览器内查 ASCII 表 → 输出 'A' (字符) / 0x41 (十六进制)
用户输入 本地处理 输出结果

开发者集成

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?
因为 ASCII 标准中大写字母和小写字母的编码值不同。'A' 的十进制码是 65,而 'a' 是 97。本工具严格按照 ASCII 表进行映射,输入大写字符就输出大写对应的码值,输入小写字符就输出小写的。如果想输出小写字母的码值,请确保输入框里是小写字母。另外,字符 '0'(零)的码值是 48,与数字 0 也不同,注意区分。
我输入了汉字'中',为什么工具没反应或者乱码?
ASCII 只定义了 0-127 共 128 个字符,包括英文大小写字母、数字、标点和控制字符,不包含汉字。输入汉字时,本工具会提示无效或显示乱码,因为汉字属于 Unicode 字符集(UTF-8 编码),不在 ASCII 范围内。如果需要转换汉字为编码,请使用 UTF-8 编解码或 Unicode 转换工具。
把 'Hello' 编码成十进制,再粘贴回去解码,怎么变成 'Hello' 前面多了个空格?
检查一下编码后的数字之间是否有多个空格或换行。本工具解码时要求数字之间用单个空格分隔(例如 '72 101 108 108 111')。如果从其他工具复制过来,数字之间可能是制表符或连续多个空格,本工具的解析器只认单个空格作为分隔符。建议粘贴后手动将多个空格替换为单个空格,或者每行只放一个数字再解码。
在线 ASCII 编解码工具那么多,你这个跟别的比有什么不一样?
核心区别是处理方式:本工具完全在浏览器内运行(纯前端 JavaScript),输入的数据不会上传到任何服务器,关闭页面即清除。而部分同类工具会将数据发送到后端处理,存在隐私风险。此外,本工具支持字符→十进制、字符→十六进制、十进制→字符、十六进制→字符四种方向互转,无需切换页面或模式,在一个界面上完成。
我输入了 128,解码出来是空白的,这是工具坏了吗?
工具没有坏。ASCII 标准只定义了 0-127 的字符编码,128 及以上属于扩展 ASCII 或 Unicode 范围。本工具严格按照标准 ASCII 表(0-127)解码,因此输入 128 时找不到对应字符,输出为空。如果需要处理 128-255 的扩展字符,请使用 ISO-8859-1(Latin-1)或 UTF-8 解码工具。
为什么输入 'A' 编码结果是 '065' 而不是 '65'?这个前面的 0 是哪里来的?
输出结果默认按三位数固定宽度显示(不足三位前面补零),主要是为了方便对齐查看。'A' 的十进制码是 65,显示为 '065',但实际数值仍是 65。解码时本工具会自动忽略前导零,所以无论是复制 '65' 还是 '065' 去解码,都能正确还原为 'A'。如果觉得前导零碍眼,可以手动去掉,不影响结果。
我有一串十六进制码 '48656C6C6F',怎么转成英文?
直接复制这串十六进制码(不带空格、不带 0x 前缀)粘贴到输入框,选择「十六进制→字符」模式即可。'48656C6C6F' 会解码为 'Hello'。注意:十六进制串必须为偶数个字符(每两个十六进制数字对应一个字节),且每个字节必须在 20-7E 范围内才能显示为可打印字符。如果包含 00-1F 或 7F 的控制字符,解码后会显示为不可见或乱码。
选择 打开 +新窗口 esc关闭