Come convertire una stringa in unsigned char in C++ ...Come convertire una stringa letterale di array di caratteri senza segno Visual C++
ho,
unsigned char m_Test[8];
voglio assegnare una stringa "Hello world"
a m_Test
.
come si fa?
Come convertire una stringa in unsigned char in C++ ...Come convertire una stringa letterale di array di caratteri senza segno Visual C++
ho,
unsigned char m_Test[8];
voglio assegnare una stringa "Hello world"
a m_Test
.
come si fa?
In primo luogo, l'array deve essere almeno abbastanza grande da contenere la stringa:
unsigned char m_Test[20];
quindi usi strcpy. È necessario lanciare il primo parametro per evitare un avvertimento:
strcpy((char*) m_Test, "Hello World");
Oppure, se si vuole essere un C puristi ++:
strcpy(static_cast <char*>(m_Test), "Hello World");
Se si desidera inizializzare la stringa piuttosto che assegnarlo, si potrebbe anche dire:
unsigned char m_Test[20] = "Hello World";
Forse vale la pena ricordare che è possibile eliminare la dimensione nell'ultimo esempio, poiché il compilatore lo individuerà. –
è possibile utilizzare la funzione strcpy Ma tenere presente che m_Test ha solo 8 dimensioni e che ci sarà un overflow. Strcpy non controllerà che e si otterrà un'eccezione
char * strcpy (char * destination, const char * source);
È possibile utilizzare la funzione di c_str()
std::string
per ottenere il char*
di stringa. Questo metodo restituisce fondamentalmente un puntatore alla stringa in stile c. Successivamente è possibile utilizzare le normali funzioni di copia delle stringhe come strcpy
o strncpy
per copiare il valore in test
.
È possibile utilizzare strcpy
:
unsigned char m_Test[8];
strcpy((char*)m_Test, "Hello world");
nota che "Ciao mondo" è troppo lungo per 8 byte, quindi probabilmente otterrete un segfault.
strncpy(m_Test, "Hello world", sizeof(m_Test));
Ecco Wikipedia su strncpy:
Per tutti gli scopi pratici, le risposte strcpy sono corrette, con la nota che 8 non è abbastanza grande per la stringa.
Se si vuole essere davvero pedanti, potrebbe essere necessario qualcosa di simile:
#include <algorithm>
int main() {
const char greeting[] = "Hello world";
unsigned char m_Test[sizeof(greeting)];
std::copy(greeting, greeting + sizeof(greeting), m_Test);
}
La ragione è che std :: copia sarà convertire i caratteri della stringa originale per unsigned char
. strcpy restituirà i caratteri nella stringa originale che sono reinterpretati come unsigned char
. Non dici quale vuoi.
I permessi standard, che vi sia una differenza tra i due, anche se è molto raro: avresti bisogno char
da firmare, in un'implementazione con il complemento a 1s' oppure registrati grandezza rappresentazione. Puoi quasi ignorare questa possibilità, ma IMO ne vale la pena, perché spiega gli avvertimenti divertenti che i buoni compilatori ti danno quando mischi i puntatori a char
e unsigned char
.
Un array deve avere un valore costante tra [] e non usare variabili o funzioni. Regole C++. –
Principalmente vero, ma 'sizeof' non è una funzione e' sizeof (greeting) 'è un'espressione costante intera. Puoi "usare le variabili" nelle espressioni della costante intera in certi modi, e questo è uno di questi, poiché il valore di "saluto" non è usato, solo il tipo, che è "const char [12]". –
'strlen (greeting)' non sarebbe permesso in C++, per la ragione che dici. –
Ho cambiato il titolo della domanda in quanto in realtà ciò che si desidera convertire è una stringa letterale. Una stringa è una classe std in C++ e il titolo era fuorviante. Spero non ti dispiaccia. –
@IvayloStrandjev il titolo attuale è estremamente fuorviante. La domanda è "come assegnare una stringa letterale a un array di caratteri non firmati" non "come convertire una stringa da lettera a carattere senza segno". E anche se hai avuto la direzione corretta, si tratta di un array di caratteri senza segno, non di un carattere senza segno. –
@Mike corretto Ho corretto che ora –