在我的 iPhone 应用程序的 sqlite 数据库中,我使用扩展 ASCII 字符集将长整数数组(最多 5 位数字)编码/压缩为字符串,以将其减少到 2 个字符。 (换句话说,我使用base150对其进行编码)
将其从数据库中取出时,sqlite3_column_text() 将字符串作为“const unsigned char *”返回。我可以使用 printf 正确打印此字符串(它甚至可以正确显示超过 128 的 ASCII 字符),但是当我尝试迭代它并单独访问字符串的每个字符以转换回我的整数时,ASCII 值超过 128 的字符会失败,因为它们是多字节的,并且只获取一个字节(我认为)。
示例:
我有一个名为encodedString的字符串,其中包含: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 字符的技巧是什么?
最佳答案
我建议使用 BLOB
列,而不是使用 TEXT
列,其中数据包含您想要使用的任何大小的整数数组(可能是 16-位未签名)。
您可以使用sqlite_column_bytes()
来确定列的大小,从而允许使用可变长度列。
这将避免您当前面临的复杂性。
关于ios - 迭代包含 "Extended ASCII"个字符的 const unsigned char *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17226345/