悦省yueser.com

← 全部指南

二进制编码指南:看清每一位到底代表什么

二进制最容易被误读的地方不是 0 和 1,而是「这八位到底是一个字节,还是一个数字」。先分清对象,再看位。

打开工具:二进制编码器

什么时候需要看到单个位

讲 UTF-8 为什么中文占三字节、解释 ASCII 只有七位有效、核对一个权限位或标志位、对着协议文档确认第 3 位是什么含义——这些场合十六进制还不够细,二进制能把每一位摊开。

调试位运算时也有用:把掩码和数值都展开,能直接看出按位与之后哪几位保留、哪几位清零。比起心算,肉眼对齐更不容易错,把结果发给同事时也不用再解释一遍换算过程,省去口头换算。

八位一组,前导零不能丢

每个字节固定输出八位,不足的前面补零。01000001 是字母 A(十进制 65),如果把前导零去掉写成 1000001,读的人可能当成 65,也可能当成别的长度,歧义就来了。工具始终补满八位,正是为了避免这种歧义。

位序按常规写法:最左边是最高位。协议文档如果写「bit 0 在最右」,对照时要从右往左数。字节之间用空格分隔,一个汉字通常是三组八位,emoji 是四组;组数不对,基本可以判断复制时漏了内容。

局限:长、重,而且不加密

同样一段文字,二进制写法是十六进制的四倍长,日志里几乎没人用它。它更适合教学、逐位核对和一次性说明,不适合长期存储或传输。真要记录字节,十六进制更紧凑,看起来也更省地方。

它同样不是加密:没有密钥,任何人按八位一组读回去就能还原。另外,二进制只描述字节,不描述字节序;多字节整数是大端还是小端,取决于读取它的程序,工具不替你做这个判断。

常见问题

为什么字母 A 是 01000001?

ASCII 里 A 的码位是 65,写成八位二进制就是 01000001:最高位 0,接着 1000001。UTF-8 对 ASCII 范围完全兼容,所以英文文本的二进制和 ASCII 一致,中文才会展开成多组。

中文为什么变成 24 位?

UTF-8 里常用汉字占三个字节,每个字节八位,因此是 24 位。这不是把汉字「拆坏」,而是编码本来的样子;解码时按同样的分组读回,就能还原字符。

和进制转换器有什么区别?

进制转换器处理的是一个数,比如 255 和 0xff 之间的换算;二进制编码器处理的是文本,把每个字符的 UTF-8 字节逐位展开。两者输出可能都是 0 和 1,但对象不同。

相关工具:二进制编码器