0

vswprintf のドキュメントによると: この関数は、引数のリストへのポインターを使用して書式設定された出力を書き込みます。

同様の効果を達成できるネイティブ iOS API の関数を知っている人はいますか?

または、これをどのように行いますか?

NSString Initwithformat がスプリントをエミュレートできることは知っていますが、vswprintf または vsprintf をエミュレートする関数は何ですか?

ありがとう

4

1 に答える 1

1

NSStringis に相当するものvsprintfは、次の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は、フォーマット文字列が 0 バイトで終わる 1 バイトの文字コードの配列を意味すると考えています。

NSString%Sは、書式文字列が 2 バイトの文字コードの配列を意味し、2 つのゼロ バイトで終わると考えています。

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 に答える