Domanda

Perché l'API di SQLite C / C ++ restituisce caratteri non firmati * per valori di testo rispetto al tipo di fatto char * ?

Ciò è in qualche modo correlato alla la domanda di carattere non firmato , tranne per il fatto che la decisione dell'API di SQLite sembra opposta alla convenzionale char * consigli forniti per valori simili a stringhe.

Ad esempio:

const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);
È stato utile?

Soluzione

Dalla Documentazione SQLite :

  

(H13821) L'interfaccia sqlite3_column_text (S, N) converte l'ennesima colonna nella riga corrente del set di risultati per l'istruzione preparata S in una stringa UTF-8 con terminazione zero e restituisce un puntatore a quella stringa.

UTF-8 vuole valori di byte che vanno da 0x00 a 0xFF. il carattere può variare da -0x80 a 0x7F (con segno) o da 0x00 a 0xFF (senza segno). La forzatura di unsigned consente la codifica corretta di una stringa UTF-8.

Altri suggerimenti

Direi che ha qualcosa a che fare con il supporto della codifica UTF-8. I valori char firmati hanno senso solo in un ambiente ASCII a 7 bit in cui tutto sopra 0x7f è aperto all'interpretazione. In UTF-8 tutto tra 0x00 e 0xFF può essere usato allo stesso modo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top