0

我有以下 proto 架构,并已使用 protoc 将其转换为 _pb2 文件。现在,我编写了一个简单的 python 代码,它从带有硬编码值的 CSV 中获取一个值,并将输出 (.bin) 写入文件中。当我尝试使用以下链接(https://protogen.marcgravell.com/decode)解码输出文件时,应该是 double/float 的列显示为 fixed64 并且值完全不同。当我在我的原型模式中使用字符串而不是双精度时,我得到了正确的值。我尝试将'ResourceValue'的类型更改为float,然后结果类型更改为fixed32。任何帮助深表感谢。

原型模式

syntax = "proto3";

message ResourceMsg {
    string ResourceKey = 1;
    double ResourceValue = 2;

}

Python代码

import pandas as pd
import sys
import os
from schema.schema_pb2 import IssueMsg


df = pd.read_csv("resource.csv")

for k in df.index:
        ResourceKey = str(df._get_value(k,'ResourceKey'))
        ResourceValue = float(490.633333333333)
        data = ResourceMsg (ResourceKey = ResourceKey,ResourceValue=ResourceValue)
        out_f = open('output.bin', 'ab')
        out_f.write(data.SerializeToString())
        out_f.close()

Python 版本:3,3.8(都试过),Protoc 版本:libprotoc 3.7.1,protobuf 版本:3.10.0

对于上面的ResourceValue,解码后的值为4647338929071202844

4

0 回答 0