2013-06-18 25 views
-4

閱讀有關NSString的文檔後,似乎NSStrings可能是7或8位(儘管通過評論來判斷,這可能是完全錯誤的)。我對Objective-C很陌生,遇到一些語法問題。這是目前我的字符串:發送值大於127

NSString *charles = [[NSString stringWithFormat:@"%c", i] encoding:NSUTF8StringEncoding];

的錯誤,我得到的是「爲選擇沒有已知的實例方法‘編碼’」。有誰知道將NSString從7位轉換爲8位的正確方法嗎?

更新:現在

unichar value; 
    for (value = 0; value < 255; value++) { 
[_device writeToTerminal:[NSString stringWithFormat:@"%C", value]]; 

} 

,0-127打印完美。終端上的輸出如預期的那樣:01,02 ..... A,B,C ...... 1A,1B,1C等 但是,一旦我點擊127以上(打印爲7F),我當它僅僅是「80」時獲得值「C2 80」。

此外,我很抱歉我在我的問題中做了錯誤,以保證3票反對。有人能解釋我做錯了什麼,以便將來避免這種情況?

+3

「似乎標準'NSString'只有7位」 - WAT? – 2013-06-18 16:36:46

+0

'encoding:NSUTF8StringEncoding' - WAT?你閱讀文檔? – 2013-06-18 16:37:28

+0

你真的想達到什麼目的?什麼是'我',你期望什麼結果? –

回答

1

要在範圍0創建一個給定的Unicode含NSString一個字.. 0xFFFF的 您可以使用%C格式:

unichar c = ...; 
NSString *charles = [NSString stringWithFormat:@"%C", c]; 

或使用stringWithCharacters

unichar c = ...; 
NSString *charles = [NSString stringWithCharacters:&c length:1]; 

要獲得原始字符代碼:

unichar c = [charles characterAtIndex:0]; 
+0

馬丁你真棒,非常感謝你! – John

+0

@OralB:我可以問你爲什麼「不接受」答案?請讓我知道是否有問題。 –

+0

嘿馬丁!我實現了你的答案,但它似乎仍在做「C2 80」而不僅僅是80個。我用我使用的代碼和我收到的輸出更新了我的問題。 – John

2

你想抓住的C字符串:

NSString *charles = [NSString stringWithFormat:@"%c", i]; 
[charles UTF8String]; 
+1

我不知道OP是否真的知道他在問什麼。但是他說他會在[0,255]中存儲一個值,因此使用「uc」作爲格式說明符可能是正確的。 –

+1

對於i> 127,您最好使用%C格式... –

+0

@MartinR好的,謝了。它仍然會變成一堆C2和C3以及其他奇怪的東西,但是我會嘗試從這裏弄清楚,因爲我無法清楚地解釋它。 – John