0

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

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

或者,你会怎么做?

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

谢谢

4

1 回答 1

1

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>得到它的声明。

于 2012-07-30T16:57:19.127 回答