unsigned char API SQLite C / C ++ *
Pergunta
Por que o SQLite C / C ++ unsigned char *
s retorno API para valores de texto em oposição ao tipo mais de facto char *
?
Este é algo relacionado a causa a unsigned char , exceto que a decisão do SQLite da API parece oposto do convencional aconselhamento char *
dada por corda-like valores.
Por exemplo:
const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);
Solução
A partir da SQLite documentação :
(H13821) O sqlite3_column_text (S, N) conversos de interface a coluna n na linha de corrente do conjunto de resultados para a instrução preparada S num UTF-8 de cadeia e devolve terminada em zero um ponteiro para essa cadeia.
UTF-8 quer byte valores que variam de 0x00 a 0xFF. carvão animal pode variar de -0x80 a 0x7F (assinado) ou 0x00 para 0xFF (unsigned). Forçar não assinado permite a codificação adequada de uma string UTF-8.
Outras dicas
Em um selvagem adivinhar diria que ele tem algo a ver com o apoio de codificação UTF-8. valores caractere assinado só fazem sentido em um ambiente ASCII 7-bit onde tudo acima 0x7f está aberto à interpretação. Em UTF-8 tudo entre 0x00 e 0xFF pode ser usado da mesma forma.