我正在尝试将旧版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];
}
我缺少什么?
答案 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];
选择取决于您希望如何使用该字符数组。