public class PbTest {
public static void main(String[] args) {
User user = User.newBuilder()
.setUserId(300)
.build();
System.out.println(user);
byte[] data = user.toByteArray();
// 十六进制形式打印
for (byte b : data) {
System.out.printf("%02X", b & 0xFF);
}
}
}
查看输出
十六进制输出是:08AC02
对这个进行分析之前,需要了解几个知识点。
MSB
MSB是most significant bit(msb)的缩写。即最高有效位。
表示一个字节8位中,最高位中如果是1表示后面字节是和该字节连续在一起的,也是该数据的一部分。如果是0表示计算终止。
例如: 10001000 00010001
最左边的数(加粗的1)即是最高位,该数据为1,表示后面的字节是该数据一部分。所以整个数据是10001000 00010001。
最高位仅仅表示后面是否还有字节,并不能参与数据存储,所以除了最高位数,后面都参与计算。即该数据为:0001000 0010001。 least significant group first
least significant group first.是指在数据范围后,刚才已经确认10001000 00010001是一个数据,同时最高位不参与计算,则为0001000 0010001。后面字节需要放置在最前面。即0010001 0001000,最终二进制为:100010001000,转换为十进制为2184.
Tag