我定义了一个proto消息:
message Header{
required string name = 1;
required int32 tabletype =2;
required int32 version = 3;
required int32 precision = 4;
required int32 numfields = 5;
}并使用protoc获取java文件;
然后我将值传递到每个字段;
headerBuilder.setName("PLB");
headerBuilder.setTabletype(84);
headerBuilder.setPrecision(21);
headerBuilder.setNumfields(4);
headerBuilder.setVersion(0);但事实上:
for (byte b : header.toByteArray()) {
System.out.print(b);
} 10 38 07 66 61 68 42 40 32 21 40 4
谁能告诉我为什么?
发布于 2018-08-03 16:59:00
您应该在这里期望的数字是十六进制的:
0A-03-50-4C-42-10-54-18-00-20-15-28-04或以十进制表示:
10 3 80 76 66 16 84 24 0 32 21 40 4所以:我认为你只是错误地转录了数据;与问题中的数字进行比较和对比:
10 38 07 66 61 68 42 40 32 21 40 4现在去掉空格:
10380766616842403221404 -- mine
10380766616842403221404 -- yours所以你有相同的十进制数字,但只是:空格错误-这很重要,因为显然1 23与12 3非常不同。
关于为什么数据是0A-03-50-4C-42-10-54-18-00-20-15-28-04的,您可以插入数据into here来获得细目,但我将把它复制到这里:
0A =字段1,类型字符串
03 =长度3
有效负载= 50-4C-42
UTF8: PLB
10 =字段2,类型变量
54 = 84 (原始)或42 (Z字形)
18 =字段3,类型变体
00 =0(原始)或0 (zigzag)
20 =字段4,类型变量
15 = 21 (原始)或-11 (zigzag)
28 =字段5,类型变体
04 =4(原始)或2(Z字形)
(注意:由于历史原因,我的工具有一个拼写错误,其中Variant===Varint)
https://stackoverflow.com/questions/51651225
复制相似问题