最近弄tcp需要从nsdata中解析出指定的二进制位
- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag {
//MyLog(@"..didReadData with tag:%ld -------data len:%d",tag,[data length]);
int bodyLength = [self parseHeader:data];//解析数据长度
NSData * subData= [data subdataWithRange:NSMakeRange(5, bodyLength)];//读取body
NSStringEncoding strEncode = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);//解决中文乱码
NSString *strReceive = [[NSString alloc] initWithData:subData encoding:strEncode];
dispatch_async(dispatch_get_main_queue(), ^{
//[itcpClient OnReciveData:strReceive];
});
}
//解析信息长度
-(int) parseHeader:(NSData*)data{
unsigned char *pData =(unsigned char *)[data bytes];
int returnLen = 0;
returnLen = pData[3];
returnLen = (returnLen<<8)+pData[2];
return returnLen;
}