Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google协议缓冲区Objective-C_Objective C_Variant - Fatal编程技术网

Google协议缓冲区Objective-C

Google协议缓冲区Objective-C,objective-c,variant,Objective C,Variant,我有以下方法: - (void)sendProtoToServer:(SampleMessage *)protoToSend { NSData *d = [protoToSend data]; int s = [protoToSend serializedSize]; if(s<128){ NSLog(@"<128"); NSData *size = [NSData dataWithBytes:&s length:1];

我有以下方法:

- (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];
   }
}
-(void)sendprotoserver:(SampleMessage*)protosend{
NSData*d=[协议发送数据];
int s=[protosend serialized];

如果(s我想指出
[NSData dataWithBytes:&s length:1]
[NSData dataWithBytes:&s length:2]
没有达到预期效果。例如,假设变量
s
等于十六进制值
0xFFCCAA00
。传递长度为1表示数据大小为一个字节。传递1表示大小等于0xFF(255),传递2表示大小等于0xFFCC(65484).您可能正在寻找的是以下内容

// >= 128
int length = 2;
NSData *size = [NSData dataWithBytes:&length length:sizeof(length)];
更新:

如果要通过发送单个字节,请尝试以下操作:

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;
// < 128
NSData*size=[NSData dataWithBytes:&length:sizeof(length)];
// >= 128
长度=2;
NSData*size=[NSData dataWithBytes:&length:sizeof(length)];

我认为这是一场1/2的战斗。它与GBP下的变体有关-请参见以下内容(请参见基本128变体部分):根据该文档,我提供的代码足够了,如果发送长度受编码变量a的影响,那么长度2足够小,不需要设置msb,我将更新我的帖子以显示示例。如果此问题帮助您发送正确的长度,请告诉我和/或接受答案,让我知道:)。如果因为变量而无法写入实际数据,请使用示例代码开始另一个问题,请随意在此处发布链接,以便我可以查看。您好,但上面的内容没有真正意义。如果s=127,则根据文档,它是一个字节如果s=129,则它将是两个字节,但上面的更新不会发送s,是吗只发送长度…我基本上被上面的内容弄糊涂了:(我对Google的缓冲区协议没有经验,但我认为您不必担心。从外观上看,serialize方法将为您处理所有编码,并包含传输数据所需的信息。然后,接收端可以反序列化该数据。我看到您正在将数据写入套接字,您要将其发送到哪里?服务器或其他设备上的自定义代码?