根据 vswprintf 的文档:此函数使用指向参数列表的指针写入格式化输出。
有谁知道可以达到类似效果的原生 iOS API 的功能?
或者,你会怎么做?
我知道 NSString Initwithformat 可以模拟 sprint,但是模拟 vswprintf 甚至 vsprintf 的功能是什么?
谢谢
根据 vswprintf 的文档:此函数使用指向参数列表的指针写入格式化输出。
有谁知道可以达到类似效果的原生 iOS API 的功能?
或者,你会怎么做?
我知道 NSString Initwithformat 可以模拟 sprint,但是模拟 vswprintf 甚至 vsprintf 的功能是什么?
谢谢
NSString相当于vsprintfis ,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支持. 本文档没有提到使用带有格式的修饰符。我查看了案例,我认为它不支持.%lswchar_tlsCFFormatCharsType__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>得到它的声明。