我正在學習使用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