像所有人都说的,原始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]的方法,这其中不涉及任何代码页转换。
不,他的意思是RARRRRRRRRRRRRRRRRRRRRRR字符串。 heh =] – 2010-01-28 02:42:16