【问题标题】:protobuffers - long value changesprotobuffers - 长值变化
【发布时间】:2018-09-23 18:46:35
【问题描述】:

我有一个 c++ 32 位 GRPC 服务器。

并且客户端是一个java 64bit GRPC应用程序。

我正在向服务器发送一条包含 long 的消息。

当服务器收到消息时,值发生了变化。

问题

在客户端我发送 1512345600000。

在服务器上我看到 517111808。

【问题讨论】:

  • 值没有改变,看来你只从你的 long 中读取了前 4 个字节而不是 8,517111808 -> 0x1ED2'8000,1512345600000 -> 0x160'1ED2'8000 你看到了吗?你应该把代码放在你读取值的地方,你用什么数据类型来保存这个值?
  • 我们需要minimal reproducible example 或魔法水晶球来了解您的代码有什么问题

标签: c++ protocol-buffers grpc


【解决方案1】:
#include <cstdint>

using namespace std;

int64_t YourFunctionToRead()
{
   // don't use 'long' as type
   // it only guarantees to be at least 32bit, but certainly doesn't have to be 64bit
   // while you need 64bit type
   int64_t veryLongIntToRead = GRPCFunc();
   return veryLongIntToRead;
}

另外,您可能有字节顺序问题。 Java运行时不是大端吗? C++ 当然不假设小端或大端。 GPRC 很可能会为您处理这个问题。值得深思。

【讨论】:

    猜你喜欢
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 2020-04-04
    • 2012-10-02
    • 1970-01-01
    • 2012-02-20
    相关资源
    最近更新 更多