簡體   English   中英

遍歷包含“擴展ASCII”字符的const無符號char *

[英]Iterating through const unsigned char * containing “Extended ASCII” characters

在我的iPhone應用程序的sqlite數據庫中,我使用擴展的ASCII字符集將一長串整數(最多5位數字)編碼/壓縮為字符串,以將其縮減為2個字符。 (換句話說,我使用base150對其進行編碼)

當將其從數據庫中刪除時,sqlite3_column_text()將字符串作為“ const unsigned char *”返回。 我可以使用printf正確打印此字符串(它甚至可以正確顯示128個以上的ASCII字符),但是當我嘗試對其進行迭代並分別訪問該字符串的每個字符以轉換回我的整數時,ASCII值超過128的字符將失敗,因為它們是多字節的,而且只有一個字節(我認為)。

例:

我有一個名為encodeString的字符串,其中包含:svÖ)

unsigned char c = encodedString[0];
unsigned char d = encodedString[2];

printf("%c", c);  //outputs "s"
printf("%c", d);  //outputs "\303"
printf("%s", encodedString);  //outputs "svÖ)"

我也嘗試過wchar_t,結果相同。 我已經使用NSStrings使其工作了,但是它非常慢,而且我已經做了數千次了(根據探查器,NSMakeRange是罪魁禍首),所以我希望它盡可能快,因此是C。

從字符串中獲取單個多字節/擴展ASCII字符的訣竅是什么?

我建議不要使用TEXT列,而建議使用BLOB列,該列中的數據包含要使用的任何大小的整數數組(也許是16位無符號)。

您可以使用sqlite_column_bytes()確定列的大小,從而允許使用可變長度的列。

這樣可以避免您當前面臨的復雜性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM