二进制编码指南:看清每一位到底代表什么
二进制最容易被误读的地方不是 0 和 1,而是「这八位到底是一个字节,还是一个数字」。先分清对象,再看位。
什么时候需要看到单个位
讲 UTF-8 为什么中文占三字节、解释 ASCII 只有七位有效、核对一个权限位或标志位、对着协议文档确认第 3 位是什么含义——这些场合十六进制还不够细,二进制能把每一位摊开。
调试位运算时也有用:把掩码和数值都展开,能直接看出按位与之后哪几位保留、哪几位清零。比起心算,肉眼对齐更不容易错,把结果发给同事时也不用再解释一遍换算过程,省去口头换算。
- 讲解字符编码与位模式
- 核对权限位、标志位、位掩码
- 对照协议里的逐位定义
- 检查某个字节的高低位
八位一组,前导零不能丢
每个字节固定输出八位,不足的前面补零。01000001 是字母 A(十进制 65),如果把前导零去掉写成 1000001,读的人可能当成 65,也可能当成别的长度,歧义就来了。工具始终补满八位,正是为了避免这种歧义。
位序按常规写法:最左边是最高位。协议文档如果写「bit 0 在最右」,对照时要从右往左数。字节之间用空格分隔,一个汉字通常是三组八位,emoji 是四组;组数不对,基本可以判断复制时漏了内容。
- 每字节 8 位,前导零补满
- 最左是最高位,注意文档的位编号习惯
- 汉字 3 组、emoji 4 组,可用来校验完整性
局限:长、重,而且不加密
同样一段文字,二进制写法是十六进制的四倍长,日志里几乎没人用它。它更适合教学、逐位核对和一次性说明,不适合长期存储或传输。真要记录字节,十六进制更紧凑,看起来也更省地方。
它同样不是加密:没有密钥,任何人按八位一组读回去就能还原。另外,二进制只描述字节,不描述字节序;多字节整数是大端还是小端,取决于读取它的程序,工具不替你做这个判断。
- 长度是十六进制的四倍
- 适合教学与逐位核对,不适合日志
- 描述字节,不描述字节序
常见问题
为什么字母 A 是 01000001?
ASCII 里 A 的码位是 65,写成八位二进制就是 01000001:最高位 0,接着 1000001。UTF-8 对 ASCII 范围完全兼容,所以英文文本的二进制和 ASCII 一致,中文才会展开成多组。
中文为什么变成 24 位?
UTF-8 里常用汉字占三个字节,每个字节八位,因此是 24 位。这不是把汉字「拆坏」,而是编码本来的样子;解码时按同样的分组读回,就能还原字符。
和进制转换器有什么区别?
进制转换器处理的是一个数,比如 255 和 0xff 之间的换算;二进制编码器处理的是文本,把每个字符的 UTF-8 字节逐位展开。两者输出可能都是 0 和 1,但对象不同。
相关工具:二进制编码器