Wenn vorhanden, gibt es eine Header-Datei, die eingeschlossen werden soll?
Dieser Code gibt einen Kompilierungsfehler:
#include <iostream>
using namespace std;
int main()
{
byte b = 2;
cout << b << endl;
return 0;
}
Wenn vorhanden, gibt es eine Header-Datei, die eingeschlossen werden soll?
Dieser Code gibt einen Kompilierungsfehler:
#include <iostream>
using namespace std;
int main()
{
byte b = 2;
cout << b << endl;
return 0;
}
char ist notwendigerweise ein Byte. Es ist nur so, dass ein Byte nicht unbedingt 8 Bit ist.
CHAR_BIT. Ich habe an mehr als einem eingebetteten System gearbeitet, bei dem Bytes nicht 8 Bit lang sind. Ein Zeichen hat eine Größe von 1, also ist ein Zeichen immer ein Byte.
char, die mindestens 8 Bit beträgt . Der Begriff "Byte" kann in anderen Kontexten anders definiert sein, aber wenn Sie über C oder C ++ sprechen, ist es besser, sich an die Definition des Standards zu halten.
using byte = unsigned charund damit fertig sein (wie in der Antwort von rmp vorgeschlagen)?
Antworten:
Nein, in C ++ gibt es keinen Byte-Datentyp. Sie können jedoch jederzeit den Bitset-Header aus der Standardbibliothek einfügen und ein typedef für das Byte erstellen:
typedef bitset<8> BYTE;
NB: Da WinDef.h BYTE für Windows-Code definiert, möchten Sie möglicherweise etwas anderes als BYTE verwenden, wenn Sie beabsichtigen, Windows als Ziel festzulegen.
Bearbeiten: Als Antwort auf den Vorschlag, dass die Antwort falsch ist. Die Antwort ist nicht falsch. Die Frage war "Gibt es in C ++ einen 'Byte'-Datentyp?". Die Antwort war und ist: "Nein, es gibt keinen Byte-Datentyp in C ++", wie beantwortet.
In Bezug auf die vorgeschlagene mögliche Alternative, für die gefragt wurde, warum ist die vorgeschlagene Alternative besser?
Nach meiner Kopie des C ++ - Standards zu der Zeit:
"Als Zeichen (char) deklarierte Objekte müssen groß genug sein, um ein Mitglied des Basiszeichensatzes der Implementierung zu speichern": 3.9.1.1
Ich habe das gelesen, um vorzuschlagen, dass die Größe eines Zeichens 16 Bit betragen würde, wenn eine Compiler-Implementierung 16 Bit zum Speichern eines Mitglieds des Basiszeichensatzes benötigt. Dass heutige Compiler dazu neigen, 8 Bit für ein Zeichen zu verwenden, ist eine Sache, aber soweit ich das beurteilen kann, gibt es sicherlich keine Garantie dafür, dass es 8 Bit sein werden.
Andererseits beschreibt "das Klassenvorlagen-Bitset <N> ein Objekt, das eine Sequenz speichern kann, die aus einer festen Anzahl von Bits N besteht." : 20.5.1. Mit anderen Worten, durch Angabe von 8 als Vorlagenparameter erhalte ich ein Objekt, das eine Sequenz aus 8 Bits speichern kann.
Ob die Alternative zu char im Kontext des zu schreibenden Programms besser ist oder nicht, hängt daher meines Wissens von Ihrem Compiler und Ihren jeweiligen Anforderungen ab, auch wenn ich mich irre. Daher war es für mich Sache des Einzelnen, den Code zu schreiben, festzustellen, ob die vorgeschlagene Alternative für seine Anforderungen / Wünsche / Bedürfnisse geeignet war.
bitset<8>besser als unsigned char?
std::byte
BIT_CHAR. Es ist ein Mysterium. Ein Geheimnis des Universums.
Nein, bytein C ++ gibt es keinen Typ namens " ". Was Sie wollen , ist statt unsigned char(oder, wenn man genau 8 Bits benötigen, uint8_taus <cstdint>, da C ++ 11 ). Beachten Sie, dass dies charnicht unbedingt eine genaue Alternative ist, wie dies signed charbei einigen Compilern und unsigned charbei anderen der Fall ist .
char,, signed charund unsigned charsind drei verschiedene Typen. charhat die gleiche Darstellung wie einer der beiden anderen.
unsigned chares größer als 8 Bit ist, uint8_twird es nicht definiert.
<stdint.h>statt einschließen <cstdint>.
std::byteEs kann keine Arithmetik ausgeführt werden, was ein Deal Breaker sein könnte.
std::bytenur eine Ergänzung ist , kann man das richtige Werkzeug für den Job wählen (dh entweder std::byte, char, unsigned charoder uint_8).
typedef unsigned char byte;oder typedef std::uint8_t byte;?
char*, unsigned char*oder std::byte*.
std::bytekann nur keine Arithmetik ausgeführt werden, was ein Deal Breaker sein könnte.
Nein, aber seit C ++ 11 gibt es [u] int8_t .
Es gibt auch byte_lite , kompatibel mit C ++ 98, C ++ 11 und höher.
namespace std
{
// define std::byte
enum class byte : unsigned char {};
};
Wenn Ihre C ++ - Version nicht über std :: byte verfügt, wird ein Bytetyp im Namespace std definiert. Normalerweise möchten Sie std keine Dinge hinzufügen, aber in diesem Fall fehlt standardmäßig etwas.
std :: byte aus der STL führt viel mehr Operationen aus.
char.