You need to enable JavaScript to run this app. Java DataInput Javadoc中Modified UTF-8「bits 6-0」表述指什么?
优惠活动
大模型
产品
解决方案
定价
更多

Java DataInput Javadoc中Modified UTF-8「bits 6-0」表述指什么?

文档中「bits 起始位-结束位」标注的实际含义

这类标注里的短横不是减法运算符,是技术文档通用的连续区间连接符,整体是描述编码拆分规则的标准写法,新手产生误解通常是因为对两个基础文档约定不熟悉:

核心约定1:bits x-y 的指代范围

这类标注出现在Modified UTF-8编码规则表中时,x和y不是当前显示的字节内部的位编号,而是待编码的Unicode码点(本质是一个整数)转换为二进制后的位编号范围:

  • 计算机领域的位编号默认从最低位(二进制最右侧的位)开始计数,从右往左数,最右位为第0位,越往左位序号越大
  • bits x-y 的意思就是:从原始码点的二进制表示中,取出从第y位到第x位的连续片段,作为数据部分放入当前字节的可用位中

可以通过一个简单逻辑辅助判断:单个字节最多只有8位,对应的位序号最大是7,如果标注里的位序号大于7,那一定不可能是当前字节的内部位,只可能指代更长的待编码原始码点的位

核心约定2:每一行标注的总长度一定对应1个字节(8位)

你之前算出总位数不对,是因为把短横当成减法运算了,我们拿你看到的三个典型标注逐行拆解验证:

  1. 标注:0 bits 6-0
    • 前面的0是当前字节的最高固定位(占1位)
    • bits 6-0是指取原始码点的第0位到第6位的连续7个二进制位,作为数据填充到当前字节的低7位
    • 总长度:1位固定前缀 +7位数据位 = 8位,正好对应1个字节,这是单字节编码的结构,用来表示U+0001到U+007F范围的字符
  2. 标注:1 1 0 bits 10-6
    • 前面的1 1 0是当前字节的高3位固定前缀(占3位)
    • bits 10-6是指取原始码点的第6位到第10位的连续5个二进制位,填充到当前字节的低5位
    • 总长度:3位固定前缀 +5位数据位 =8位,是双字节编码的第一个字节的结构
  3. 标注:1 0 bits 5-0
    • 前面的1 0是当前字节的高2位固定前缀(占2位)
    • bits 5-0是指取原始码点的第0位到第5位的连续6个二进制位,填充到当前字节的低6位
    • 总长度:2位固定前缀 +6位数据位 =8位,是双/三字节编码的后续字节的结构

实际编码拆分验证

拿匹配规则的U+00A9(版权符号,Unicode码点169,二进制为10101001,属于双字节编码范围)举例,按照规则拆分:

  1. 双字节编码的第一字节:3位固定前缀110 + 原始码点补全为11位后(00000010101001),取第6位到第10位的片段(00010),拼接后为11000010(0xC2)
  2. 双字节编码的第二字节:2位固定前缀10 + 原始码点第0位到第5位的片段(101001),拼接后为10101001(0xA9)
    整个拆分过程完全和表格里的标注对应,全程没有减法运算的参与。

内容的提问来源于stack exchange,提问作者AlexzanderNikitaK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.01 06:24:00