Java Android LEB128类型大小
我对LEB128或Little-Endian Base 128格式感到困惑。在Java Android LEB128类型大小,java,android,Java,Android,我对LEB128或Little-Endian Base 128格式感到困惑。在AOSP源代码Leb128.java中,其读取函数的返回类型(无论是有符号还是无符号)为int。我知道java中int的大小是4字节,也就是32位。但是AOSP中LEB128的最大长度是5字节,即35位。那么其他丢失的3位在哪里呢 感谢您的回复。LEB中的每个数据字节在实际输出中仅占7位-剩余的位用于指示是否结束 发件人: 要使用无符号LEB128对无符号数字进行编码,请首先用二进制表示数字。然后零将数字扩展到7位的倍
AOSP
源代码Leb128.java
中,其读取函数的返回类型(无论是有符号还是无符号)为int
。我知道java中int
的大小是4字节,也就是32位。但是AOSP中LEB128
的最大长度是5字节,即35位。那么其他丢失的3位在哪里呢
感谢您的回复。LEB中的每个数据字节在实际输出中仅占7位-剩余的位用于指示是否结束
发件人:
要使用无符号LEB128对无符号数字进行编码,请首先用二进制表示数字。然后零将数字扩展到7位的倍数(这样最高有效的7位不都是0)。将数字分成7位一组。为每个7位组输出一个编码字节,从最低有效到最高有效
额外的位与其说是“丢失”,不如说是“用于指示它是否是数据的结尾”
您不能希望对任意32位值进行编码,其中一些值占用少于4个字节,而另一些值占用多于4个字节。LEB中的每个数据字节在实际输出中仅占7位-剩余的位用于指示是否结束
发件人:
要使用无符号LEB128对无符号数字进行编码,请首先用二进制表示数字。然后零将数字扩展到7位的倍数(这样最高有效的7位不都是0)。将数字分成7位一组。为每个7位组输出一个编码字节,从最低有效到最高有效
额外的位与其说是“丢失”,不如说是“用于指示它是否是数据的结尾”
您不能希望对任意32位值进行编码,其中一些值占用少于4字节,而另一些值占用多于4字节。谢谢您的回复。我知道额外的位表示数据的结束。我把LEB中的7位*5字节=35位这一点弄糊涂了。但是返回值类型是int
,其大小是32位
。现在我可能知道LEB是zipint
的一种格式,所以不会丢失任何位,而是额外的位。@litao3rd:恐怕我不太理解你的评论,但是如果你使用的数据大部分都是5字节,那么LEB是个糟糕的选择。关键是要用少于4个字节来表示大多数值。。。否则,您最好只使用固定的每个值4字节。是的,如果你写了一个5字节的值,前3位应该是0。我的意思是在LEB格式中,数据大部分是5字节,也就是35位。LEB128用于存储大小为32位的int
。这样就足够工作了。我只是对它的大小感到困惑。感谢并抱歉我的英语。@litao3rd:它最多使用5个字节来表示32位,是的。不过,我还是希望选择它来表示大多数值都可以用1-3字节表示的数据。谢谢你的回复。我知道额外的位表示数据的结束。我把LEB中的7位*5字节=35位这一点弄糊涂了。但是返回值类型是int
,其大小是32位
。现在我可能知道LEB是zipint
的一种格式,所以不会丢失任何位,而是额外的位。@litao3rd:恐怕我不太理解你的评论,但是如果你使用的数据大部分都是5字节,那么LEB是个糟糕的选择。关键是要用少于4个字节来表示大多数值。。。否则,您最好只使用固定的每个值4字节。是的,如果你写了一个5字节的值,前3位应该是0。我的意思是在LEB格式中,数据大部分是5字节,也就是35位。LEB128用于存储大小为32位的int
。这样就足够工作了。我只是对它的大小感到困惑。感谢并抱歉我的英语。@litao3rd:它最多使用5个字节来表示32位,是的。但同样,我希望它被选择用于大多数值可以用1-3字节表示的数据。