在Objective-C中定义了从unsigned char *到char *的强制转换行为

时间:2009-08-05 19:45:24

标签: objective-c casting sqlite char unsigned

我理解unsigned char *char *类型之间的区别。我也了解如何使用reinterpret_cast将unsigned char *转换为C ++中的char *

我在Objective-C中使用sqlite3,并试图通过调用

来获取NSString
sqlite3_column_text(...);

要做到这一点,我基本上是这样做的:

char *cParam = (char *)sqlite3_column_text(compiledStatementPtr, 0);
NSString *aParam = nil;
if (cParam) {
    aParam = [NSString stringWithUTF8String:cParam];
}
但是,

sqlite3_column_text()会返回一个unsigned char *,我担心演员的行为会导致char *。我已经读过演员阵容是特定于实现的,我想知道这是否是Objective-C中的安全演员,或者我是否完全咆哮了错误的树?

1 个答案:

答案 0 :(得分:4)

由于演员而你没有太多担心。实际上,Apple示例代码使用的是与您使用的完全相同的代码模式:

self.title =
  [NSString stringWithUTF8String:(char *)sqlite3_column_text(init_statement, 0)];

(来自SQLite Book List Book.m类)。

我认为您应该更关心实际拥有UTF-8字符串的数据库。