【问题标题】:SQLite C/C++ API unsigned char *SQLite C/C++ API 无符号字符 *
【发布时间】:2010-09-24 02:28:57
【问题描述】:

为什么 SQLite C/C++ API 为文本值返回 unsigned char *s 而不是更实际的 char * 类型?

这与the unsigned char 问题有些相关,只是 SQLite API 的决定似乎与针对类似字符串的值给出的传统char * 建议相反。

例如:

const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);

【问题讨论】:

  • 真的吗?您能否提供示例文档来说明 unsigned char * 的这种用法?
  • @strager:添加到问题中。

标签: c++ c api sqlite char


【解决方案1】:

来自SQLite documentation

(H13821) sqlite3_column_text(S,N) 接口将准备好的语句 S 的结果集当前行中的第 N 列转换为以零结尾的 UTF-8 字符串,并返回指向该字符串的指针。

UTF-8 需要从 0x00 到 0xFF 的字节值。 char 的范围可以从 -0x80 到 0x7F(有符号)或 0x00 到 0xFF(无符号)。强制无符号允许正确编码 UTF-8 字符串。

【讨论】:

    【解决方案2】:

    我猜测它与支持 UTF-8 编码有关。带符号的 char 值仅在 7 位 ASCII 环境中才有意义,其中 0x7f 以上的所有内容都可以解释。在 UTF-8 中,0x00 和 0xFF 之间的所有内容都可以平等使用。

    【讨论】:

    • 我也得出了这个结论(没有研究)。
    • 我也得出了这个结论(/with/研究;见我的回答)。
    • 是的,这就是为什么我赞成你的回答。我确实去寻找证据,但只是没有时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-07
    • 1970-01-01
    相关资源
    最近更新 更多