簡體   English   中英

NSData到NSString返回Null

[英]NSData to NSString returns Null

我搜索過了。 但仍然無法得到它。

我正在將NSdata轉換為NSString。 當我做[data description]; 它返回我<00000000 31323334 35363738>是的,我收到我的字符串@“12345678”。

如何將其正確轉換為NSString? 我試過了

NSString *b = [NSString stringWithUTF8String:[data bytes]];
NSString *a = [[NSString alloc] initWithBytes:[data bytes] length:[data length] encoding:NSUTF8StringEncoding];

兩者都返回null。 任何的想法? 謝謝

大家好,感謝您的所有建議。 它似乎是不變的,因此永遠是一個空洞的角色。 因此,每當我收到某些內容時,我只刪除第一個<00000000>,然后它的工作正常

如果編碼不正確,會發生這種情況。

嘗試使用ASCII測試。 ASCII幾乎可以肯定地用於檢索某些字符串。 如果它只是數字,它可能會起作用。

NSString *a = [[NSString alloc] initWithBytes:[data bytes] length:[data length] encoding:NSASCIIStringEncoding];

除UTF-8外,最常見的是:

NSASCIIStringEncoding
NSUnicodeStringEncoding
NSISOLatin1StringEncoding
NSISOLatin2StringEncoding
NSSymbolStringEncoding

嘗試一下,看看它們是否有效。

我正在將NSdata轉換為NSString。 當我做[數據描述]; 它返回我<00000000 31323334 35363738>是的,我收到我的字符串@“12345678”。

不 - 你沒有收到那個字符串。 您正在接收一個以一堆0x00值開頭的字節序列,后跟一系列恰好對應於ASCII序列“12345678”的字節。

即你有原始數據,並試圖將其轉換為約束類型,但不能,因為約束類型不能代表原始數據。

您可以嘗試在NSString上使用“有損轉換”API,但這可能不起作用,無論如何都會很脆弱。

最好的選擇?

僅將實際表示字符串的NSData中的字節轉換為NSString的實例。 這可以使用-initWithBytes:length:encoding:來完成-initWithBytes:length:encoding: ; 你需要進行計算才能找到正確的偏移量和長度。

這可能是因為數據的第一個字節是00.字符0是字符串字符的結尾。 從ASCII(從字符數組或字節數組開始)創建字符串時,如果在開頭遇到字符0,則會生成一個空字符串。

但是我希望它返回一個帶有0個字符的NSString實例,而不是null。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM