从数据中删除垃圾字符

时间:2011-03-26 15:23:04

标签: iphone objective-c

我正在做一个与套接字编程相关的项目,其中从服务器我获得第一个字节为“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”。 我可以在删除这些垃圾值方面获得一些帮助吗?

2 个答案:

答案 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.
}