MiServe DevTools

我的贴纸

把工具固定在这里,会保存在此浏览器中。

文本转十六进制、二进制和字节

以 UTF-8 文本、十六进制、二进制、十进制、八进制和 Base64 查看同一串字节,编辑其中任意一种,其余的都会随之更新。

字节分隔符
二进制分组位数

在浏览器中运行。粘贴的内容不会被上传。

关于此工具

同一串字节,六种写法

计算机以字节存储文本,一个字节就是 0 到 255 之间的一个数。十六进制把每个字节写成两位数字(48),二进制写成八位(01001000),八进制写成三位数字(110),十进制则写成普通的数(72)。这四种写法表示的是同一个字节,在 ASCII 和 UTF-8 中都是字母 H。Base64 则把每三个字节编码为四个可打印字符。

此页面上的各个视图始终显示同一串字节。在任意一个视图中输入,其余视图都会重新计算。如果输入的内容无法解析,该字段会被标记出来,其他字段保留最后一次有效的内容。

字符不等于字节

文本视图使用 UTF-8 编码,每个码点占一到四个字节。ASCII 字母占一个,é 占两个(c3 a9),大多数中日韩字符占三个,大多数 emoji 占四个或更多。因此字节数和字符数并不相同。

当浏览器支持 Intl.Segmenter 时,字符数指的是字素簇(grapheme cluster)的数量,也就是读者眼中的一个字符。一个家庭 emoji 是一个字素,由多个码点通过零宽连接符组合而成,所以页面也会同时显示码点数。

并非所有字节序列都是有效的 UTF-8。输入无效的字节时,文本视图会用替换字符 U+FFFD 代替这些字节,工具也会给出警告。

支持的输入格式

字节之间可以用空格、换行、逗号或下划线分隔,十六进制还可以像 MAC 地址那样用冒号或连字符分隔。支持 0x、\x、0b 和 0o 前缀,因此可以直接粘贴源代码中数组字面量里的值(不含方括号)。没有分隔符的数字按固定宽度读取:每个字节对应两位十六进制数字、八位二进制或三位八进制数字。

逗号或前缀总是开始一个新值,所以 0b1000, 0b0001 是 8 和 1 两个字节。而四位一组、仅用空格分隔的二进制(如 1000 0001)会按每八位读取,得到一个字节。

0x 前缀输出样式会生成逗号分隔的列表,例如 0x48, 0x65,可以直接粘贴回代码中。二进制和八进制视图同样使用 0b 和 0o,十进制视图则写成普通的数。十进制字节没有固定宽度,所以即使分隔符设为“无”,它们之间也会保留空格。

常见问题

如何把文本转换为十六进制?

先把每个字符编码为字节(这里使用 UTF-8),再把每个字节写成两位十六进制数字。单词 Hi 会变成 48 69。在第一个字段中输入文本,然后查看十六进制视图即可。

为什么一个字符会产生多个字节?

UTF-8 只对 ASCII 字符使用一个字节。é 这样带重音的字母需要两个字节,大多数中文、日文和韩文字符需要三个,大多数 emoji 需要四个或更多。

文本中的 � 字符是什么意思?

它是替换字符 U+FFFD,出现在字节不是有效 UTF-8 的地方,例如数据本身是二进制的,或者使用了 Latin-1、UTF-16 等其他编码。

我的文本会被发送到服务器吗?

不会。转换由浏览器标签页中的 JavaScript 完成。你输入的内容不会发送到任何地方,也不会被保存。

编码分类的其他工具