根据vswprintf的文档:此函数使用指向参数列表的指针编写格式化输出。
有没有人知道可以达到类似效果的原生iOS API的功能?
或者,你会怎么做?
我知道NSString Initwithformat可以模拟sprint,但是模拟vswprintf甚至vsprintf的功能是什么?
谢谢
答案 0 :(得分:1)
NSString
等效vsprintf
为initWithString: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>
才能获得声明。