Esiste un tipo di dati ‘byte’ in C ++?

Se esiste c’è un file di intestazione da includere?

Questo codice fornisce errori di compilazione:

#include  using namespace std; int main() { byte b = 2; cout << b << endl; return 0; } 

No non esiste alcun tipo di dati in byte in C ++. Tuttavia puoi sempre includere l’intestazione bitset dalla libreria standard e creare un typedef per byte:

 typedef bitset<8> BYTE; 

NB: Dato che WinDef.h definisce BYTE per il codice di Windows, potresti voler usare qualcosa di diverso da BYTE se intendi mirare a Windows.

Modifica: in risposta al suggerimento che la risposta è sbagliata. La risposta non è sbagliata. La domanda era “Esiste un tipo di dati ‘byte’ in C ++?”. La risposta era ed è: “No non c’è nessun tipo di dati in byte in C ++” come risposta.

Per quanto riguarda l’alternativa suggerita per la quale è stato chiesto perché l’alternativa suggerita è migliore?

Secondo la mia copia dello standard C ++, al momento:

“Gli oggetti dichiarati come caratteri (char) devono essere abbastanza grandi da memorizzare qualsiasi membro del set di caratteri di base delle implementazioni”: 3.9.1.1

Ho letto questo per suggerire che se un’implementazione del compilatore richiede 16 bit per memorizzare un membro del set di caratteri di base, allora la dimensione di un char sarebbe 16 bit. Che i compilatori di oggi tendono ad usare 8 bit per un char è una cosa, ma per quanto ne so non c’è sicuramente alcuna garanzia che sarà 8 bit.

D’altra parte, “il template bitset di class descrive un object che può memorizzare una sequenza costituita da un numero fisso di bit, N.” : 20.5.1. In altre parole, specificando 8 come parametro template, finisco con un object che può memorizzare una sequenza composta da 8 bit.

Se l’alternativa sia meglio o meno char, nel contesto del programma che viene scritto, quindi dipende, per quanto ho capito, anche se potrei sbagliarmi, dal tuo compilatore e dai tuoi requisiti in quel momento. Pertanto, per quanto mi riguarda, è stato compito dell’individuo scrivere il codice per determinare se l’alternativa suggerita fosse appropriata per le sue esigenze / esigenze / esigenze.

No, non esiste un tipo chiamato ” byte ” in C ++. Quello che vuoi invece è il unsigned char (o, se hai bisogno esattamente di 8 bit, uint8_t da , dal C ++ 11 ). Nota che char non è necessariamente un’alternativa accurata, poiché significa signed char su alcuni compilatori e unsigned char su altri.

se usi Windows, in WinDef.h hai:

 typedef unsigned char BYTE; 

Usando C++11 c’è una bella versione per un tipo di byte definito manualmente:

 enum class byte : std::uint8_t {}; 

Questo è almeno ciò che fa il GSL .

A partire da C++17 (quasi) questa stessa versione è definita nello standard come std::byte (grazie a Neil Macintosh per entrambi).

Sì, esiste std::byte (definito in ).

Il C ++ 17 lo ha introdotto.

No, ma dal momento che in C ++ 11 c’è [u] int8_t .

C’è anche byte_lite , compatibile con C ++ 98, C ++ 11 e successivi.