我正在做一个与套接字编程相关的项目,其中从服务器我获得第一个字节为“9”的数据。 当我收到这个网络数据包时,以下是被解雇的方法:
- (void) receivedNetworkPacket:(NSData*)message viaConnection:(Connection*)connection
{
NSRange range = NSMakeRange(0,1);
NSData *lendata = [message subdataWithRange:range];
NSString *strlen = [[NSString alloc]initWithData:lendata encoding:NSASCIIStringEncoding];
NSInteger intele = [strlen intValue];
if ([message length] == intele) {
NSLog(@"completed");
}
else {
NSLog(@"inprogress");
}
}
在lendata中我得到了正确的值但是当我尝试在字符串中获取它时,我得到一些垃圾值,如“\ b”或“\ t”。 我可以在删除这些垃圾值方面获得一些帮助吗?
答案 0 :(得分:0)
你的问题可能不是你有垃圾字符 - 这是你的字符串有一个特定的编码,你需要在提取数据时遵守。什么是对您收到的数据进行编码?什么是字符串编码? (例如UTF8,或者标准的拉丁语编码等)
如果通过套接字发送的内容实际上不是字符串,则将其解释为字符串并不一定有意义。
知道编码后,可以在NSString类中使用此方法创建NSString:
- (id)initWithData:(NSData *)data encoding:(NSStringEncoding)encoding
答案 1 :(得分:0)
当你说第一个字节是“9”时,你是说第一个字节是带有ASCII码0x39的字符“9”,还是第一个字节实际上是0x09?我怀疑后者,因为字节0x09对应于制表符,通常缩写为\t
。 \b
的值为0x08,BTW。
您可以通过执行以下操作来获取字节的代码值:
const unsigned char *bytes = (const unsigned char *)[message bytes];
int value;
if (message.length > 0) {
value = bytes[0];
} else {
// handle error case here.
}