Pregunta

¿Por qué la API SQLite C / C ++ devuelve unsigned char * s para valores de texto en oposición al tipo más de facto char * ?

Esto está algo relacionado con la pregunta unsigned char , excepto que la decisión de la API de SQLite parece opuesta a la convencional char * consejos para valores similares a cadenas.

Por ejemplo:

const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);
¿Fue útil?

Solución

Del documentación de SQLite :

  

(H13821) La interfaz sqlite3_column_text (S, N) convierte la enésima columna en la fila actual del conjunto de resultados para la instrucción preparada S en una cadena UTF-8 terminada en cero y devuelve un puntero a esa cadena.

UTF-8 quiere valores de bytes que van desde 0x00 a 0xFF. char puede variar de -0x80 a 0x7F (con signo) o 0x00 a 0xFF (sin signo). Forzar sin signo permite la codificación adecuada de una cadena UTF-8.

Otros consejos

Supongo que diría que tiene algo que ver con la compatibilidad con la codificación UTF-8. Los valores de caracteres firmados solo tienen sentido en un entorno ASCII de 7 bits donde todo por encima de 0x7f está abierto a interpretación. En UTF-8, todo entre 0x00 y 0xFF se puede utilizar por igual.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top