我有以下方法:
- (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长度。我想这跟变种有关
有人知道怎么做吗?快把我逼疯了。
提前谢谢。
发布于 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)。您可能正在寻找以下内容
// >= 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)];https://stackoverflow.com/questions/6387402
复制相似问题