我正在学习使用cocoaAsyncSocket为我的TCP连接开发iPad应用程序。Objective C NSData到NSString
当我将NSData打印到控制台时,它以十六进制打印整个数据。当我转换为NSString并打印时,它总是只打印第一个字节。
- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag {
NSString *msg = [[NSString alloc] initWithBytes:[data bytes] length:[data length] encoding:NSUTF8StringEncoding];
NSLog(@"Server Reply data: %@", data);
NSLog(@"Server Reply: %@",msg);
}
从控制台打印出来是: “服务器返回数据:< 4b000230 30303037 33323030 35342020>” “服务器回复:K “
我转换错了吗?
当数据读取十六进制ETX(03)为cocoaAsyncsocket可以停止吗?我看到可以阅读CRLF。
谢谢。
cocoaasyncsocket有这个分隔符来结束msg的权利吗?缺省值是CRLF'返回[NSData的dataWithBytes: “\ X0D \ 0A” 长度:2];' 使用您的方法进行解码,它仅适用于'返回[NSData的dataWithBytes: “” 长度:1];' 因为repy以ETX结束,所以我将它改为'return [NSData dataWithBytes:“\ x03 \”length:1];' 它只返回第一个字符串字符,当我用你的方法把数据改成字符串时.. – kraitz