2010-01-28 80 views

回答

3

从你的链接,说明您是“原始字符串”的意思,答案是:没有内置的方法对你的要求。

但是,您可以将一个字符串的出现次数替换为另一个字符串,例如,您可以用@"\\n"替换@"\n"。这应该让你接近你正在寻找的东西。

2

的Objective-C是C的限制超集,因此您可以自由使用char *char[]无论你想(如果这就是你所谓的原始字符串)。

1

如果你的意思是C风格的字符串,那么是的。

+0

不,他的意思是RARRRRRRRRRRRRRRRRRRRRRR字符串。 heh =] – 2010-01-28 02:42:16

4

Objective-C是C的超集。所以答案是肯定的。你可以写

char* string="hello world"; 

任何地方。然后,您可以把它变成一个NSString后来

NSString* nsstring=[NSString stringWithUTF8String:string]; 
2

像所有人都说的,原始ANSI字符串非常简单。如果你想编译Objective C++,只需使用简单的C字符串或C++ std :: string即可。

但是,Cocoa的本地字符串格式是UCS-2 - 固定宽度的2字节字符。 NSStrings在内部存储为UCS-2,i。即作为无符号短阵列。 (顺便说一句,就像在Win32和Java中一样。)该数据类型的系统范围别名是unichar和UniChar。这是事情变得棘手的地方。

GCC包括wchar_t的数据类型,以及让你定义一个原始宽炭字符串常量这样的:

wchar_t的* WS = L;“这一个宽字符串”。

但是,默认情况下,此数据类型被定义为4字节int,因此与Cocoa的unichar不同!您可以覆盖通过指定下列编译器选项:

-fshort-WCHAR

但随后就失去了宽字符ÇRTL功能(wcslen(),wcscpy()等) - 在RTL是没有该选项编译并假定为4字节的wchar_t。手动重新实现这些功能并不难。你的来电。

一旦你有一个真正的2字节的wchar_t的原始字符串,你可以平凡它们转换为NSString的和回:

wchar_t *ws = L"Hello"; 
NSString *s = [NSString stringWithCharacters:(const unichar*)ws length:5]; 

与所有其他[stringWithXXX]的方法,这其中不涉及任何代码页转换。

+0

微调:可可中的unichar实际上是UTF-16而非UCS-2。 UCS-2和UTF-16之间的区别很小(因为Unicode 65536以上的字符很少见),但UCS-2只能处理高达Unicode 65535的字符。Cocoa使用UTF-16,因此可以处理整个Unicode范围(使用多字符序列)。 – 2010-10-19 07:26:54

+0

你是说[NSString length]返回字符长度而不是unichar的长度? – 2010-10-19 14:28:52