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);
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top