首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Google Protocol Buffers Objective-C

Google Protocol Buffers Objective-C
EN

Stack Overflow用户
提问于 2011-06-17 22:33:48
回答 1查看 591关注 0票数 2

我有以下方法:

代码语言:javascript
复制
- (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的消息,我不知道如何获得正确的NSData *size长度。我想这跟变种有关

有人知道怎么做吗?快把我逼疯了。

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2011-06-17 22:56:07

我想指出的是,[NSData dataWithBytes:&s length:1][NSData dataWithBytes:&s length:2]并没有做您期望的事情。例如,假设您的变量s等于十六进制值0xFFCCAA00。传递长度为1意味着数据的大小将是一个字节。传递1,你的大小将等于0xFF (65484),传递2,你的大小将等于0xFFCC (255)。您可能正在寻找以下内容

代码语言:javascript
复制
// >= 128
int length = 2;
NSData *size = [NSData dataWithBytes:&length length:sizeof(length)];

更新:

如果您想发送单字节,请尝试执行以下操作:

代码语言:javascript
复制
unsigned char length = 1;
// < 128
NSData *size = [NSData dataWithBytes:&length length:sizeof(length)];
// >= 128
length = 2;
NSData *size = [NSData dataWithBytes:&length length:sizeof(length)];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6387402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档