2012-07-30 33 views
0

根據vswprintf的文檔:此函數使用指向參數列表的指針寫入格式化輸出。針對iOS的寫入格式化輸出

有誰知道可以實現類似效果的原生iOS API的函數嗎?

或者,你會怎麼做?

我知道的NSString Initwithformat可以模擬衝刺,但什麼是模擬vswprintf甚至vsprintf中的作用?

感謝

回答

1

NSString相當於vsprintfinitWithString: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>才能獲得其聲明。

+0

你好,我想你剛纔這個說的:NSString的* iosString = [[NSString的頁頭] initWithFormat:@ 「%1!=%ls」 的論點:argListTest]。正在返回我訪問不良。這個函數的目的是發送argListTest中的* w_char。這是正確的方法嗎? – mskw 2012-07-30 18:39:55

+0

我按下輸入得太早,但現在應該更新。 – mskw 2012-07-30 18:42:10

+0

我已經更新了我的答案。 – 2012-07-30 18:54:13