当阅读DataInput的javadoc,特别是在“修改的UTF-8”部分。时。我遇到三个表,分别是"0位6-0“,”10-6位“,.,”10位5-0“。
我是一个Java新手,所以它看起来像减法,不确定,但是如果是这样的话,我们把它加到1和0中,它会变成7位。据我所知,一个字节由8位组成。
这些"0位6-0.“卑劣?
发布于 2021-03-05 07:31:14
javadoc告诉您每个字节是如何划分的。
将每个字节视为由8个单独元素(位)组成的向量。
第一个块只有一个字节,以及相应的可能的位值。
byte 1
bit number 7 6 5 4 3 2 1 0
bit value 0 ? ? ? ? ? ? ? <-- bits 6 - 0
这意味着,对于以一个字节编码的字符,前导位始终为0。这些是从\u0001
到\u007F
的字符。
第二个块有两个字节,变得更复杂一些。
byte 1 byte 2
bit number 15 14 13 12 11 10 9 8 | 7 6 5 4 3 2 1 0
bit value 1 1 0 ? ? ? ? ? | 1 0 ? ? ? ? ? ?
^ ^
| |
bits 10 to 6 of bits 5 to 0 of
the utf-8 codepoint the utf-8 codepoint
这些字符在从\u0080
到\u07FF
的范围内
例如,在这个范围内的符号是变符号(微符号)。
在普通unicode中,字节是11000010 10110101
。
看看这个字符,看看它是如何与两个字节字符的位对齐的。你有
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 1 0 0 0 0 1 0 1 0 1 1 0 1 0 1
Bits 10-6 ------*-*-*----*-* ^-^-^-^-^-^----bits 5-0
你的下场是
byte 1 byte 2
bit number 15 14 13 12 11 10 9 8 | 7 6 5 4 3 2 1 0
bit value 1 1 0 - - 0 1 0 | 1 0 1 1 0 1 0 1
其中,字节11和12将为0,但我在其中放了一个-,只是为了显示它们的意义。
对不起,我希望它能帮上忙。
发布于 2021-03-05 07:33:24
它显示了比特的范围。位被编号,最低的,最小的位有索引0,下一个位有索引1,下一个位有索引2等等。例如,数字13有二进制表示1101。这意味着位数0有值1,位数1有值0,位数2和3有值1。因此,例如,在文档中,"0位6-0“意味着字节中的最高位必须为零,而索引从6到0的低位则被您的数字占用。
发布于 2021-03-05 07:39:04
该表讨论了如何在修改后的UTF8编码中表示字符。我将以这个部分为例:
空字符'\u0000‘和范围'\u0080’到'\u07FF‘中的字符由一对字节表示。
注意,您可以使用11位来表示这些数字。用11位表示的最大数字是2^11-1= 2047 = 7FF。让我们将这11位位编号为0到10,所以位-10是最重要的位,位-0是最小的位。
该表告诉您,在修改后的UTF8编码中,这些数字编码的字符用2个字节表示。
第一个字节以比特110 (这三个比特是固定的)开始,然后是我们试图表示的数字的位-10、位-9、位-8、位-7、位-6。
第二个字节以位10开头(这两个位是固定的),后面跟着数字的位-5、位-4、位-3、位-2、位-1、位-0.
简而言之,“位10-6”指的是“位10 到 6",它不是4位,而是5位。
我鼓励您将此与正常的UTF8编码进行比较,以了解两者之间的差异。
https://stackoverflow.com/questions/66488360
复制相似问题