(1)我想做的就是将一个字符串变成一个表示ASCII码的整数数组。换句话说,我想转换:
"This is some string. It has spaces, punctuation, AND capitals."
进入一个包含62个整数的数组。
(2)如何从NSArray返回字符串?
(3)此外,这些昂贵的操作在内存或计算时间方面?似乎我们必须在每次迭代或其他事情上创建一个新变量。
我知道如何声明所有变量,我假设我在字符串的长度上运行循环,并且在每次迭代时,我以某种方式获取字符并将其转换为数字,并调用内置命令。
感谢您提供的任何帮助或链接到可能有用的帖子!
答案 0 :(得分:2)
如果要将ascii值存储在nsarray中,那将会很昂贵。 NSArray只能保存对象,因此您必须为每个ASCII值创建一个NSNumber:
unsigned len = [string length];
NSMutableArray arr = [NSMutableArray arrayWithCapacity:len];
for (unsigned i = 0; i < len; ++i) {
[arr addObject:[NSNumber numberWithUnsignedShort:[string characterAtIndex:i]]];
}
2)返回NSString,您需要使用MSMutableString并将每个字节附加到NSMutableString。
说过我建议你不要使用这种方法,如果你能避免它。
更好的方法是使用@ EmilioPelaez的答案。从迭代和连接字符串开始,从内存缓冲区返回到NSString是简单而便宜的。
NSString * stringFromMemory = [[NSString alloc] initWithBytes:buffer length:len encoding: NSASCIIStringEncoding];
答案 1 :(得分:1)
我最终使用了我在这里找到的语法。谢谢你的帮助
答案 2 :(得分:0)
NSString有一个获取数组中字符的方法:
NSString *string = "This is some string. It has spaces, punctuation, AND capitals.";
unichar *buffer = malloc(sizeof(unichar) * [string lenght]);
[string getCharacters:buffer range:NSMakeRange(0, [string length])];
如果你检查unichar的定义,它是一个未签名的短片。