2009-12-29 41 views
2

我正在嘗試將傳統C++程序轉換爲Objective-C。該程序需要256個可能的ASCII字符(每個字符8位)的數組。我試圖使用NSString方法initWithBytes:length:encoding:來這樣做。不幸的是,當編碼如下所示時,它崩潰(儘管它編譯)。試圖理解NSString :: initWithBytes

NSString*  charasstring[256]; 
unsigned char char00; 
int   temp00; 
    for (temp00 = 0; temp00 <= 255; ++temp00) 
     { 
     char00 = (unsigned char)temp00; 
     [charasstring[temp00] initWithBytes:&char00 length:1 encoding:NSASCIIStringEncoding]; 
     } 

我失蹤了什麼?

回答

9

首先,該方法只是initWithBytes:length:encoding而不是您在標題中使用的NSString::initWithBytes。我僅僅指出這一點,因爲忘記C++所知道的一切是Objective-C成功的第一步。 ;)

其次,你的代碼表明你不瞭解Objective-C或使用Foundation API。

  • 你不分配的NSString任何地方

  • 的情況下,你宣佈的256個NSString的實例指針數組,可能不是你想要什麼

  • 正確編碼的ASCII字符串不包括所有的字節

我建議你開始here

+0

這不是問題。我會盡量不要對你的崇拜做出反應。 – McPragma 2009-12-29 20:13:35

+2

他的觀點是有效的,現在的代碼有他列出的問題。 – phoebus 2009-12-29 20:18:05

+4

如果你把它當成侮辱,我很抱歉。它並不打算成爲。代碼離基礎太遠了,從Objective-C入門文檔開始,這將是對時間的有效利用。關於遺忘C++的評論也是非常有意的;我一直在教Objective-C二十年,而最難的學生是那些基於C++(或其他語言)行爲做出假設的學生。 – bbum 2009-12-29 21:07:22

1

爲了解決特定的問題,下面的代碼應該做的伎倆:

NSMutableArray* ASCIIChars = [NSMutableArray arrayWithCapacity:256]; 
int i; 
for (i = 0; i <= 255; ++i) 
    { 
    [ASCIIChars addObject:[NSString stringWithFormat:@"%c", (unsigned char)i]]; 
    } 

的情況下使用,後來,如下:

NSString* oneChar = [ASCIIChars objectAtIndex:32]; // for example 

但是,如果你需要的是一個字符數組,你可以使用的字符的一個簡單的C數組:

unsigned char ASCIIChars [256]; 
int i; 
for (i = 0; i <= 255; ++i) 
    { 
    ASCIIChars[i] = (unsigned char)i; 
    } 

要使用,後來,如下:

unsigned char c = ASCIIChars[32]; 

的選擇將取決於您希望如何使用的字符數組。