【发布时间】:2017-07-05 12:50:22
【问题描述】:
在使用字节数组时,我在使用 GRPC 时遇到了很多问题。这是由 .proto 编写的
message myType {
int32 format = 1;
bytes data = 2;
}
我将 CPP 用于服务器实现,将 Java 用于客户端。在 Java 中使用 ByteString 是一件轻而易举的事,但不能在 CPP 中反序列化(byte[] 与从 Java 发送的内容不同)。
缓冲区是一个字节[] byte buffer[<large_size>] 我正在将字节数组(它是一个图像)转换为一个较小的字节数组,并且在尝试转换从 grpc 接收到的字节 [] 时它崩溃了。 CPP中的转换功能很好,因为我在使用GRPC之前将它与相同的图像一起使用过
这是 CPP 的反序列化代码。这里的“req”是一个myType对象,buffer是一个byte[]
myFormat = req->format();
dataLen = req->data().length();
memcpy(buffer, req->data().c_str(), dataLen);
据我了解,req->data() 是 cpp std::string 格式
【问题讨论】:
-
“无法成功反序列化”是什么意思?发生什么了?发布任何错误、崩溃 + 堆栈跟踪、预期输出与接收到的输出,否则“失败”会表现出来
-
在缓冲区字节数组中获取错误/无效数据
-
您需要提供minimal reproducible example(例如:尚不清楚
buffer是如何分配的以及您如何检查收到的数据) -
buffer is a byte[]
byte buffer[<large_size>]我正在将字节数组(它是一个图像)转换为一个较小的字节数组,当尝试转换从 grpc 接收到的 byte[] 时它崩溃了. CPP中的转换功能很好,因为我在使用GRPC之前将它与相同的图像一起使用过
标签: c++ protocol-buffers grpc