【发布时间】:2011-08-26 15:07:16
【问题描述】:
我使用 winsock 从网络上的另一台计算机接收值。它是一个 TCP 套接字,消息的前 4 个字节带有它的大小。消息的其余部分由服务器使用 protobuf(来自 google 的协议缓冲区)格式化。
我认为,问题在于服务器发送的值似乎是作为 char 发送的十六进制值(即 0x10 仅收到 10 个)。要接收这些值,我会这样做:
bytesreceived = recv(sock, buffer, msg_size, 0);
for (int i=0;i<bytesreceived;i++)
{
data_s << hex << buffer[i];
}
其中 data_s 是一个字符串流。他们我可以使用 protobuf 中的 ParseFromIstream(&data_s) 方法并恢复我想要的信息。
我遇到的问题是它非常长(我使用 QSock 获得了另一个实现,但我不能用于我的项目,但它更快,所以服务器端没有问题)。
我尝试了许多从互联网上和任何地方获取的东西(使用字节数组、字符串),但没有任何效果。
我还有其他选择吗?
感谢您的时间和 cmets ;)
【问题讨论】:
-
澄清一下,您想将
[0-9A-F]范围内的一长串 ASCII 字符转换成……什么?成字节流?大端 4 字节整数流? -
这个问题和C有关系吗?它看起来像 C++。
-
流、数组或字符串,因为 protobuf 可以处理所有这些事情。我认为目标是获得 big-endian 4 字节整数,但所有这一切在我的脑海中都不是很清楚..
-
@Fred Larson:对。我已经重新标记了它。
-
@Fred :我的代码是 C++,因为我使用流,但如果我能得到涉及 C 而不是 C++ 的帮助,我会非常高兴 :)
标签: c++ hex protobuf-net