Use*_*234 10 macos cocoa objective-c
我有wchar_t buffer [100].有时它需要Unicode字母,有时则不需要.
我需要将其转换为NSString.
我正在使用 NSString *str = [NSString string:(char *)buffer];
它来转换它.
当我尝试NSLog我的NSString时,有时它得到正确的结果,但有时不是.
我错过了什么?
谢谢!
use*_*086 16
我的转换器为"char","wchar_t","NSString".使用和享受.
//-=(W)=-
+(NSString *)stringFromChar:(const char *)charText
{
return [NSString stringWithUTF8String:charText];
}
+(const char *)charFromString:(NSString *)string
{
return [string cStringUsingEncoding:NSUTF8StringEncoding];
}
+(NSString *)stringFromWchar:(const wchar_t *)charText
{
//used ARC
return [[NSString alloc] initWithBytes:charText length:wcslen(charText)*sizeof(*charText) encoding:NSUTF32LittleEndianStringEncoding];
}
+(const char /*wchar_t*/ *)wcharFromString:(NSString *)string
{
return [string cStringUsingEncoding:NSUTF8StringEncoding];
}
Run Code Online (Sandbox Code Playgroud)
Jer*_*myP 13
一切都像Totumus Maximus所说,但另外你需要知道缓冲区中的字符是如何编码的.与wchar_t
32位一样,您可能有一些32位编码,其中UTF32-LE最有可能.你想要获得NSString的目的是:
NSString* result = [[NSString alloc] initWithBytes: (const void*)buffer
length: sizeof(wchar_t) * numberOfCharsInBuffer
encoding: someEncoding];
Run Code Online (Sandbox Code Playgroud)
哪里:
numberOfCharsInBuffer
是wchar_t
要解码的缓冲区中的s 数.上面的方法并不假设字符串是空终止的,并且如果它们出现在您指定的长度之前,将很乐意尝试将空值放入NSString中(注意,使用wchar_t"null"表示32位值为零).someEncoding
是缓冲区中字符串使用的编码.尝试NSUTF32StringEncoding
,NSUTF32LittleEndianStringEncoding
,NSUTF32BigEndianStringEncoding
.也许这会清除一切。
C89引入了一个新的整数类型wchar_t
。这类似于一个字符,但通常“更宽”。在许多系统上,包括Windows,a wchar_t
为16位。这是使用较早版本的Unicode标准(最初定义的字符数少于65,535个)实现Unicode支持的系统的典型代表。Unicode后来进行了扩展以支持历史和特殊用途的字符集,因此在某些系统(包括Mac OS X和iOS)上,该wchar_t
类型的大小为32位。这通常没有很好的文档记录,但是您可以使用这样的简单测试来找出:
// how big is wchar_t?
NSLog(@"wchar_t is %u bits wide", 8 * sizeof(wchar_t));
Run Code Online (Sandbox Code Playgroud)
在Mac或iPhone上,这将打印“ wchar_t为32位宽”。此外,wchar_t
是C中另一个整数类型的typedef。在C ++中,wchar_t
是内置整数类型。实际上,这意味着使用宽字符时需要在C中包含#include。
参考:http : //blog.ablepear.com/2010/07/objective-c-tuesdays-wide-character.html
归档时间: |
|
查看次数: |
9353 次 |
最近记录: |