2012-09-19 31 views
0

我是ICU(IBM的unicode庫)的新手。我正在閱讀大塊文件,我試圖將它從UTF-8轉換爲UTF-16。使用ucnv_toUnicode進行ICU轉換

我使用ucnv_toUnicode,我遇到了一個問題:如何確定轉換器寫入目標的字節數?

 ucnv_toUnicode(conv, &target, targetLimit, 
        &source, sourceLimit, NULL, 
        feof(f)?TRUE:FALSE,   
        &status); 

目標是一個4096字節的緩衝區。

根據api文檔,它將被ucnv_toUnicode移動到最後一個UChar複製後的位置。看起來我應該能夠在目標和原始位置之間做出某種算術來確定這一點,但我是C新手。任何人都可以幫我一把嗎?

現在假設我想fwrite()把什麼放入目標。我會通過什麼來改寫單位的大小和數量?

回答

2

由於文件說:

目標[...]第一個可用UCHAR開出指針在輸出緩衝區,並最終寫入到輸出的最後一個UCHAR後指指點點。

所以很簡單:

char input[SLEN]; 
UChar output[TLEN]; 

char const * source = input; 
UChar * target = output; 

ucnv_toUnicode(conv, &target, output + TLEN, 
       &source, input + SLEN, NULL, feof(f), &status); 

現在你已經寫target - output UChars輸出緩衝區。

輸入同樣如此;您將消耗source - input字符(=字節)。

+0

@alk:是的,謝謝!固定。 –