NSString Initwithformat的限制:参数:

时间:2012-07-30 21:08:49

标签: objective-c ios string nsstring

我正在尝试使用

NSString *iosString = [[NSString alloc] initWithFormat:@"%ls = %ls" arguments:argListSave];

问题是initWithFormat不支持%ls,而argListSave包含wchar_t*,我该如何解决此限制?

1 个答案:

答案 0 :(得分:2)

wchar_t *ws1 = va_arg(argListSave, wchar_t *);
wchar_t *ws2 = va_arg(argListSave, wchar_t *);

NSString *s1 = [[NSString alloc] initWithCharacters:ws1 length:wstrlen(ws1)];
NSString *s2 = [[NSString alloc] initWithCharacters:ws2 length:wstrlen(ws2)];

NSString *iosString = [[NSString alloc] initWithFormat:@"%@ = %@", s1, s2];
[s1 release];
[s2 release];

编辑:似乎这两种字符的大小不同。因此,您可能希望实现类似strcpy的转换函数:

unichar *wchar_to_unichar(unichar *result, wchar_t *input)
{
    while (*input)
    {
        *result++ = *input++;
    }
    return result;
}

编辑2:似乎这仍然不好。正如@Jonathan Grinspan指出的那样,您还必须考虑UTF32代码点并使用

initWithBytes:length:encoding:

在Intel mac上使用NSUTF32LittleEndianStringEncoding,在PowerPC Mac上使用NSUTF32BigEndianStringEncoding(长度为字符串长度,以字节为单位,而不是字符)。