2
我有以下方法:谷歌协议缓冲的Objective-C
- (void)sendProtoToServer:(SampleMessage *)protoToSend {
NSData *d = [protoToSend data];
int s = [protoToSend serializedSize];
if(s<128){
NSLog(@"<128");
NSData *size = [NSData dataWithBytes:&s length:1];
[socket writeData:size withTimeout:TIME_OUT tag:100];
[socket writeData:d withTimeout:TIME_OUT tag:101];
} else {
NSLog(@">= 128");
NSData *size = [NSData dataWithBytes:&s length:2];
[socket writeData:size withTimeout:TIME_OUT tag:100];
[socket writeData:d withTimeout:TIME_OUT tag:101];
}
}
我知道上面是非常错误的(在理解这一切只是我的黑客尝试)。我不知道如何获得长度超过128的邮件的正确长度。我认为这是与变种有关
有谁知道如何做到这一点?因为它让我疯狂。
在此先感谢。
我觉得这是1/2战斗。它与GBP下的Variant有关 - 请参阅以下内容(请参阅Base 128 Variant部分): http://code.google.com/apis/protocolbuffers/docs/encoding.html – robert
那么根据该文档我提供的代码是足够的,如果发送的长度受编码变体的影响,则2的长度足够小,不需要设置msb我将更新我的帖子以显示示例。如果这个问题帮助你通过告诉我和/或接受答案让我知道正确的长度:)。如果你在编写实际数据时遇到困难,因为变体会通过示例代码开始另一个问题,请随时在此处发布链接,以便我可以查看它。 – Joe
嗨,但上面并没有什么意义。 如果S = 127,然后accoridng到DOC它是一个字节 如果S = 129那么这将是两个字节 但上面的更新不发送S,它仅发送长度... 我很困惑通过以上基本上:( – robert