ios - 迭代包含 "Extended ASCII"个字符的 const unsigned char *

标签 ios objective-c c sqlite

在我的 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/

相关文章:

ios - 删除文件 :///prefix from URL path

ios - 将动画添加到以编程方式创建的 UIview

iphone - 使用 GKPlayer/Gamekit 时如何存储用户元数据

iphone - 实例变量在 iOS 应用程序中不返回值

ios - 类方法+setLoggingEnabled : not found

c - 找到正确的 c 类型

ios - 是否可以将应用程序的数据存储在用户的 Apple 帐户中?

objective-c - iOS 的 Google 静态库如何不需要 "other linker flag"(OTHER_LDFLAGS)

c - "multiple definition of"编译错误的链接问题

c - 我如何找到无符号的 BB[] 使得 (char *) (BB + 1) = "Red Ross!"