2013-03-06 81 views
0

我从服务器获取数据,NSData很好,并给出了一个字节数。 NSString的为空:(第二日志)来自NSData的NSString为空?

NSData *stringOfData = [data subdataWithRange:NSMakeRange(0, [data length])]; 
NSString *finalData = [[[NSString alloc] initWithData:stringOfData encoding:NSUTF8StringEncoding] autorelease]; 

NSLog(@"RECIEVED FROM SERVER:%@",stringOfData); //is ok 
NSLog(@"RECIEVED :%@",finalData); //is null 

RECIEVED FROM SERVER:<0b000000 02000000 03000000 453242> 
RECIEVED : 

请告诉我错在这里? 我正在尝试一切,并以某种方式它总是空。 。

编辑:数据是我从服务器获得的字节。 它假设是int型的数字,但我想它显示为字符串.. 我试图其他种类的编码,但仍然空..

+1

'subdataWithRange'调用是做什么的?它似乎返回与原始对象相同数量的数据? “0b000000 02000000 03000000 453242”又如何是“字符串”? – trojanfoe 2013-03-06 11:17:48

+0

“stringOfData”它包含什么?我的意思是什么类型的数据? – Hari1251 2013-03-06 11:18:43

+0

你有没有尝试任何其他编码像NSASCIIStringEncoding? – Anupdas 2013-03-06 11:19:18

回答

0

如果数据包含整数,然后将原始数据加载到一个NSString不会做你想做的。也许你想要更像这样的东西:

int *i = (int *)data.bytes; 
NSLog(@"RECIEVED :%d, %d, %d, %d", i[0], i[1], i[2], i[3]); 

你也可能发现自己不得不处理字节顺序问题。如果是这样,这可能会有所帮助:

NSLog(@"RECIEVED :%d, %d, %d", ntohl(i[0]), ntohl(i[1]), ntohl(i[2]), ntohl(i[3])); 
+0

请注意,您应该使用固定大小的整数类型(如'uint32_t')而不是'int',因为您应该知道数据中每个整数有多少位(而“int”可能会因您所在的平台而异)。 – 2013-03-06 11:40:51