So erstellen Sie ein byte-array in C++?
Bitte haben Sie einen Blick auf die folgende header-Datei
#pragma once
class MissileLauncher
{
public:
MissileLauncher(void);
private:
byte abc[3];
};
Diese erzeugt die Fehler
Error 1 error C2143: syntax error : missing ';' before '*'
Habe ich versucht, es zu tun auf diese Weise
byte *abc;
aber auch nicht, gleiche Fehlermeldung. Jedoch, ich bemerkte, dass ich kann andere gebaut tyes arrays auf diese Weise ein Beispiel für ein int-array. Warum dies geschieht auf byte-array? Wie man dieses Problem lösen? Ich möchte weisen die Werte in der cpp-Datei. Irgendwelche Ideen?
- Es gibt keine
*
im code vorhanden ist, so kann es nicht vielleicht erzeugen diese Fehlermeldung. Bitte genau. - Auch, wo ist
byte
aus? Es ist nicht ein standard-Typ.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen
oder
**Hinweis: In älteren Compiler (nicht C++11) ersetzen Sie die
using
Linie mittypedef unsigned char byte;
char
müssen nicht zu einem bytechar
ist garantiert ein byte;sizeof(char) == 1
immer. Aber "byte" ist nicht gewährleistet, werden 8 bits.Wenn Sie möchten, dass genau ein byte, uint8_t definiert in cstdint wäre die ausdrucksstärksten.
http://www.cplusplus.com/reference/cstdint/
Byte ist nicht ein standard-Typ in C oder C++. Versuchen char, die in der Regel und mindestens 8 bit lang.
Vielleicht Sie können nutzen Sie die
std::bitset
Art, wie Sie in C++11. Es kann verwendet werden zum repräsentieren einer festen Reihenfolge vonN
bits, die manipuliert werden können, die durch herkömmliche Logik.Kompilieren mit gcc 4.7.2
Bekomme ich:
Byte ist nicht ein standard-Datentyp in C/C++, aber es kann immer noch verwendet werden, die Art und Weise ich nehme an, Sie wollen es. Hier ist, wie: daran Erinnern, dass ein byte ist ein acht-bit-Speicher-Größe, die darstellen können, ist eine der ganzen zahlen zwischen -128 und 127 (einschließlich). (Es gibt 256 Ganzzahlen in diesem Bereich; acht bits darstellen kann 256 -- zwei hoch acht unterschiedliche Werte.). Auch daran erinnern, dass ein char in C/C++ ist ein byte (acht bits). So alle Sie tun müssen, um ein byte-Datentyp in C/C++ ist, diesen code an der Spitze der Quellcode-Datei:
#define byte char
So können Sie jetzt erklären
byte-abc[3];
Könnte man Qt benutzen, welche, im Fall Sie nicht wissen, ist C++ mit einem Bündel von zusätzlichen Bibliotheken und Klassen und so weiter. Qt hat eine sehr bequeme QByteArray-Klasse, die ich bin ziemlich sicher, dass die Ihren Bedürfnissen entsprechen würde.
http://qt-project.org/
Byte ist nicht ein standard-Typ in C/C++, so ist es vertreten durch
char
.Dies hat den Vorteil, dass Sie behandeln können eine
basic_string
als byte-array ermöglicht eine sichere Lagerung und Funktion übergeben. Dies wird Ihnen helfen, vermeiden Sie die memory-leaks und segmentation-Fehler, die Sie stoßen können, wenn über die verschiedenen Formen derchar[]
undchar*
.Zum Beispiel, dies erzeugt einen string als byte-array mit null-Werten:
Diese lassen sich standard-bitweise Operationen mit anderen
char
Werte, einschließlich derer in anderenstring
Variablen. Zum Beispiel zu XOR derchar
Werte der anderenu_string
überbytes
:.length
Anruf wird bezogen auf die Zahl der Zeichen, NICHT die Anzahl der bytes. Wenn Sie diese auf Produktionssysteme, sollten Sie besorgt sein. Strings und Byte-arrays sehr unterschiedlich verwendet.char
array sollte stattdessen verwendet werden, um zu gewährleisten 8-byte-Zeichen? Die traurige Sache über diese Lösung ist die Einführung der manuellen Speicherverwaltungchar*
, die in meiner Erfahrung ist die Ursache von etwa der Hälfte der Speicher-Lecks sieht man in C/C++ - code.char
ist technisch nicht garantiert werden 8 bits (oft ist es aber). Wenn Sie möchten, dass stärkere Garantien, verwenden Sieuint8_t
ausstdint.h
. Zu Ihrem Punkt über die manuelle Speicherverwaltung, die ja technisch das, was du sagst, wahr ist. Jedoch neuere Versionen von C++ haben, std::array, die würde Abstrakt das Speicher-management für Sie. Wenn Sie nicht verwenden können, die neueren standard, ich denke, es ist einen Schub entspricht (es ist einen Schubarray
und eine Steigerung derbuffer
sowohl in der Behandlung von byte-Sequenzen). Aber wenn wir reden über C, ja die manuelle Speicherverwaltung ist Ihre einzige option ist wirklich.basic_string<uint8_t> bytes
. Oder gibt es eine bessere Basis geben für ein Byte alsuint8_t
?basic_string
. Morgen werden Sie mieten einen neuen Entwickler, wer sieht diebasic_string
und nimmt an, dass es einen echten string. Dann rufen Siec_str
auf es zu übergeben, den Inhalt in eine C-Bibliothek. Und plötzlich werden all diejenigen, die null-bytes zu einem problem werden (da C-strings sind null-terminiert). Also ja, können Sie es verwenden, es ist nur eine ungerade Werkzeug für den job, wenn es bessere Mittel zur Verfügung.