char-array uint8_t array

dies ist ein Bereich von C/C++, dass ich noch nie gut.

mein problem ist, dass ich eine Zeichenfolge, die müssen schließlich enthalten einige null-Zeichen. die Behandlung alles wie ein char-array (oder string) arbeiten nicht, wie die Dinge neigen dazu, zu Scheiße aus, wenn man die erste null. also dachte ich, ok, ich werde die Umstellung auf uint8_t, also alles ist nur eine Zahl. ich kann Dinge bewegen, wie nötig, und warf es wieder zu einem char, wenn ich bereit bin.

meine wichtigste Frage jetzt ist: wie kann ich kopieren Sie einen Teil eines string in einen uint8_t Puffer?

effektiv, ich würde gerne etwas machen wie:

std::string s = "abcdefghi";
uint8_t *val = (uint8_t*)malloc(s.length() + 1);
memset(val, 0, s.length() + 1);

//Assume offset is just some number
memcpy(val + offset, s.substr(1, 5).c_str(), 5);

offensichtlich, bekomme ich eine Fehlermeldung wenn ich versuche diese. es gibt wahrscheinlich einige Art von Betrug, dass kann getan werden, in der das erste argument der memcpy (ich sehe Sachen wie (*(uint8_t*)) online, und habe keine Ahnung, was das bedeutet).

jede Hilfe, was zu tun ist?

und während ich hier bin, wie kann ich leicht gegossen, diese wieder zu einem char-array? nur static_cast die uint8_t-pointer auf ein char-pointer?

vielen Dank.

std::string ist durchaus mit '\0' Zeichen. Es gibt keinen Grund, dies zu tun, es sei denn, du bist mit C-string-manipulation Funktionen, oder andere APIs, die nur nehmen char*s mit keine Länge. Und diese APIs nicht das richtige für strings mit eingebetteten null-Werte sowieso.
nach der Lektüre Ihrer Notiz, begann ich, schaut sich um. std::string arbeiten könnte. ich werde einige tests durchführen. sieht aus wie ich bin in Ordnung, so lange wie ich halten Sie Weg von c_str. ich würde immer noch gerne wissen, die Antwort auf die obige Frage, nur aus Neugier.
Dinge wie (*(uint8_t*)) sind oft wirft ein abstrakter Datentyp ist, dann ist eine Besetzung, die wird legal an diesem Punkt war sich aber nicht zuvor, dann ein cast wieder nach unten. Es wird oft verwendet, wenn casting von Funktionszeigern, zum Beispiel (DWORD)(*(void**))(void(*)(int)) (-ish, es nicht verwendet haben, in eine Weile). Nur für Referenz. 🙂
"natürlich, ich erhalte eine Fehlermeldung, wenn ich versuche, diese". Lass uns nicht raten. Welche Fehlermeldung erhalten Sie?
Sie haben mehrere falsche Annahmen. Es ist schwierig, Ihre Frage zu beantworten, wie ein Ergebnis. char arrays sind durchaus in der Lage zu halten nul-Zeichen, als std::string Objekte. Weiter, es gibt nichts, dass uint8_t bedeutet, dass char nicht gleich gut. Bitte zeigen Sie uns, was Sie versucht haben, und wir sagen Ihnen, wo Sie falsch läuft. Können Sie erstellen, die eine 10-line-Programm, das zeigt, was schief gehen für Sie? Siehe sscce.org.

InformationsquelleAutor jasonmclose | 2012-05-31

Schreibe einen Kommentar