2013-03-06 56 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