为iOS编写格式化输出

时间:2012-07-30 16:15:04

标签: objective-c ios

根据vswprintf的文档:此函数使用指向参数列表的指针编写格式化输出。

有没有人知道可以达到类似效果的原生iOS API的功能?

或者,你会怎么做?

我知道NSString Initwithformat可以模拟sprint,但是模拟vswprintf甚至vsprintf的功能是什么?

谢谢

1 个答案:

答案 0 :(得分:1)

NSString等效vsprintfinitWithString:arguments:,如下所示:

// format has type NSString *
// ap has type va_list
NSString *formattedString = [[NSString alloc] initWithFormat:format arguments:ap];

NSString没有单独的宽字符版本。每个NSString存储Unicode字符,而不是字节。如果您有一组UTF-16字符,则可以使用+[NSString stringWithCharacters:length:]将其转换为NSString

NSString认为%s格式字符串表示一个单字节字符代码数组,以零字节结尾。

NSString认为%S格式字符串表示一个双字节字符代码数组,以两个零字节结束。

在iOS上,wchar_t为4个字节。我认为NSString不支持%ls数组的wchar_t格式字符串。 This documentation未提及使用l格式的s修饰符。我查看了the CFFormatCharsType case in __CFStringAppendFormatCore,我认为它不支持%ls

如果你有一个wchar_t数组,并且它包含UTF-32字符代码,你可以创建一个包含相同字符的NSString

wchar_t *wchars = ...;
unsigned int wcharCount = ...; // number of characters pointed to by wchars

NSString *string = [[NSString alloc] initWithBytes:(const void *)wchars
    length:wcharCount * sizeof *wchars
    encoding:NSUTF32StringEncoding];

如果您只想使用vswprintf,您可以; iOS支持它。您需要#include <wchar.h>才能获得声明。