SQLite C / C ++ API unsigned char * - PullRequest
       13

SQLite C / C ++ API unsigned char *

4 голосов
/ 26 ноября 2008

Почему SQLite C / C ++ API возвращает unsigned char * s для текстовых значений, в отличие от более фактического char * типа?

Это в некоторой степени связано с вопросом без знака char , за исключением того, что решение SQLite API кажется противоположным общепринятому char * совету, данному для строковых значений.

Например:

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

Ответы [ 2 ]

11 голосов
/ 26 ноября 2008

Из документации SQLite :

(H13821) Интерфейс sqlite3_column_text (S, N) преобразует N-й столбец в текущей строке набора результатов для подготовленного оператора S в строку UTF-8 с нулевым символом в конце и возвращает указатель на эту строку.

UTF-8 хочет значения байтов в диапазоне от 0x00 до 0xFF. char может варьироваться от -0x80 до 0x7F (со знаком) или от 0x00 до 0xFF (без знака). Принудительное использование unsigned позволяет правильно кодировать строку UTF-8.

9 голосов
/ 26 ноября 2008

По дикой догадке, я бы сказал, что это как-то связано с поддержкой кодировки UTF-8. Значения со знаком со знаком имеют смысл только в 7-битной среде ASCII, где все, что выше 0x7f, открыто для интерпретации. В UTF-8 все между 0x00 и 0xFF можно использовать одинаково.

...