试图理解NSString :: initWithBytes

时间:2009-12-29 19:39:18

标签: objective-c nsstring

我正在尝试将旧版C ++程序转换为objective-C。该程序需要256个可能的ASCII字符数组(每个字符8位)。我正在尝试使用NSString方法initWithBytes:length:encoding:来执行此操作。不幸的是,当编码如下所示时,它会崩溃(尽管它会编译)。

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]; 
        }

我缺少什么?

2 个答案:

答案 0 :(得分:9)

首先,该方法只是initWithBytes:length:encoding,而不是您在标题中使用的NSString::initWithBytes。我之所以指出这一点,只是因为忘记C ++中您所知道的一切是您使用Objective-C取得成功的第一步。 ;)

其次,您的代码表明您不了解Objective-C或使用Foundation API。

  • 您没有在任何地方分配NSString的实例

  • 你声明了一个包含256个NSString实例指针的数组,可能不是你想要的

  • 正确编码的ASCII字符串不包含所有字节

我建议你开始here

答案 1 :(得分: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];

选择取决于您希望如何使用该字符数组。