Wie die Konvertierung von 'const char [9]' in 'const unsigned char *'
Ich versuche den code hier erwähnt:
std::string base64_encode(unsigned char const* bytes_to_encode, unsigned int in_len) {
}
Und pass: base64_encode("mystring", 8)
.
Es zeigt sich eine Typ-Konvertierung Fehler:
error C2664: 'base64_encode' : cannot convert parameter 1 from 'const char [9]' in 'const unsigned char *
- Ich denke, dein Hauptproblem ist
unsigned char const*
versuchen Sie einfach, nachdem er einchar*
- Ihre string-literal ist ein array von char ist, und nicht ein array von unsigned char. Sie müssen, um Sie zu wirken, oder verwenden Sie ein array von unsigned char, als Ihre Eingabe.
- Ich verstehe nicht, warum es ein "const" in den ersten Platz. Aber es scheint zu funktionieren jetzt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich kam gerade über diesen Beitrag und wollte klären, etwas für jemand anderes zu versuchen, base64-kodiert einen string. Der code bezeichnet, der durch den original-Plakat stammt von der web-Seite: http://www.adp-gmbh.ch/cpp/common/base64.html. Wenn Sie gehen, um die Autors-Seite und schauen Sie unter "Die test-Datei" Abschnitt werden Sie sehen, wie genau der Autor empfiehlt, den code verwendet werden.
Versuchte ich es in meinem Programm und es scheint zu funktionieren perfekt.
Ich glaube nicht, dass Sie können string-Literale mit
unsigned char
s. Der einfachste Weg, um erstellen Sie eine Sequenz vonunsigned char
s aus einem string-literal ist wahrscheinlichOffensichtlich, die Logik könnte sein, gekapselt in eine passende Funktion aufrufen
base64_encode()
.Die alternative ist nur
reinterpret_cast<unsigned char const*>("hello")
aber ich persönlich bin kein großer fan von diesem Ansatz.unsigned char x[] = "hello";
ist auch möglich, siehe [dcl.init.string]/1.reinterpret_cast
, was über das casting-Lösung sind Sie nicht ein fan von? Scheint verschwenderisch zu kopieren Sie die Zeichenfolge, um zu tun, was ist im wesentlichen eine Besetzung?using uchar_arr = unsigned char const[]; bae64_encode(uchar_arr{"hello"});
.reinterpret_cast<...>()
ist in der Regel die Umsetzung definiert. Da mein code ist gedacht, um Plattformen, die ich nicht einmal kenne, über alles, was ist, ist die Implementierung definiert ist problematisch. Während die conversion-Ansatz einführen kann einigen Aufwand, ist es tragbar.std::vector<unsigned char> ustr(str.begin(), str.end());