Вопрос

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

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

Например:

const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);
Это было полезно?

Решение

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

  

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top