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