根据 vswprintf 的文档:此函数使用指向参数列表的指针写入格式化输出。
有谁知道可以达到类似效果的原生 iOS API 的功能?
或者,你会怎么做?
我知道 NSString Initwithformat 可以模拟 sprint,但是模拟 vswprintf 甚至 vsprintf 的功能是什么?
谢谢
根据 vswprintf 的文档:此函数使用指向参数列表的指针写入格式化输出。
有谁知道可以达到类似效果的原生 iOS API 的功能?
或者,你会怎么做?
我知道 NSString Initwithformat 可以模拟 sprint,但是模拟 vswprintf 甚至 vsprintf 的功能是什么?
谢谢
NSString
相当于vsprintf
is ,initWithString:arguments:
像这样:
// format has type NSString *
// ap has type va_list
NSString *formattedString = [[NSString alloc] initWithFormat:format arguments:ap];
没有单独的宽字符版本NSString
。EveryNSString
存储 Unicode 字符,而不是字节。如果您有一个 UTF-16 字符数组,您可以使用+[NSString stringWithCharacters:length:]
它来将其转换为NSString
.
NSString
认为%s
格式字符串表示一个单字节字符代码数组,以零字节结尾。
NSString
认为%S
格式字符串是一个两字节字符代码的数组,以两个零字节结尾。
在 iOS 上,awchar_t
是 4 个字节。我认为不NSString
支持. 本文档没有提到使用带有格式的修饰符。我查看了案例,我认为它不支持.%ls
wchar_t
l
s
CFFormatCharsType
__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>
得到它的声明。