protobuffers-长值更改 我有一个C++ 32位GRPC服务器。
客户端是一个java 64位GRPC应用程序 我正在向服务器发送包含长消息的消息 当服务器收到消息时,该值已更改 问题 在客户端,我发送151234560000 在服务器上我看到了517111808。protobuffers-长值更改 我有一个C++ 32位GRPC服务器。,c++,protocol-buffers,grpc,C++,Protocol Buffers,Grpc,客户端是一个java 64位GRPC应用程序 我正在向服务器发送包含长消息的消息 当服务器收到消息时,该值已更改 问题 在客户端,我发送151234560000 在服务器上我看到了517111808。#包括 #include <cstdint> using namespace std; int64_t YourFunctionToRead() { // don't use 'long' as type // it only guarantees to be at le
#包括
#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;
}
使用名称空间std;
int64\t您的函数读取()
{
//不要使用“long”作为类型
//它只保证至少为32位,但肯定不必为64位
//而您需要64位类型
int64_t verylongenttoread=GRPCFunc();
返回verylongtoread;
}
此外,你可能有持久性问题。Java运行时不是big-endian吗?C++当然不会假设很少或大的字节序。GPRC很可能会为您处理此问题。值得思考。值没有改变,似乎您只读取了long中的前4个字节,而不是8个,
517111808->0x1ED2'8000
,151234560000->0x160'1ED2'8000
看到了吗?你应该把代码放在你读取值的地方,你用什么数据类型来保存这个值?我们需要一个或一个神奇的水晶球来知道你的代码出了什么问题