Se esiste, c'è un file di intestazione da includere?
Questo codice fornisce un errore di compilazione:
#include <iostream>
using namespace std;
int main()
{
byte b = 2;
cout << b << endl;
return 0;
}
Se esiste, c'è un file di intestazione da includere?
Questo codice fornisce un errore di compilazione:
#include <iostream>
using namespace std;
int main()
{
byte b = 2;
cout << b << endl;
return 0;
}
char è necessariamente un byte. È solo che un byte non è necessariamente 8 bit.
CHAR_BIT. Ho lavorato su più di un sistema embedded in cui i byte non sono lunghi 8 bit. Un carattere è definito per avere una dimensione di 1, quindi sì, un carattere è sempre un byte.
char, che è di almeno 8 bit. Il termine "byte" può essere definito in modo diverso in altri contesti, ma quando si parla di C o C ++ è meglio attenersi alla definizione dello standard.
using byte = unsigned chare farla finita (come suggerisce la risposta di rmp)?
Risposte:
No, non esiste un tipo di dati byte in C ++. Tuttavia puoi sempre includere l'intestazione del set di bit 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 scegliere come target 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 esiste un tipo di dati byte in C ++" come risposta.
Per quanto riguarda la possibile 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 sufficientemente grandi da contenere 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, la dimensione di un carattere sarebbe di 16 bit. Il fatto che i compilatori odierni tendano a usare 8 bit per un carattere è una cosa, ma per quanto ne so non c'è certamente alcuna garanzia che saranno 8 bit.
D'altra parte, "il modello di classe bitset <N> descrive un oggetto che può memorizzare una sequenza composta da un numero fisso di bit, N." : 20.5.1. In altre parole, specificando 8 come parametro del modello, mi ritrovo con un oggetto che può memorizzare una sequenza composta da 8 bit.
Se l'alternativa è migliore o meno a char, nel contesto del programma in fase di scrittura, dipende quindi, per quanto ho capito, anche se potrei sbagliarmi, dal tuo compilatore e dalle tue esigenze in quel momento. Spettava quindi all'individuo che scrive il codice, per quanto mi riguarda, determinare se l'alternativa suggerita fosse appropriata per le proprie esigenze / desideri / esigenze.
bitset<8>meglio di unsigned char?
std::byte
BIT_CHAR. È un mistero. Un mistero dell'universo ..
No, non esiste un tipo chiamato " byte" in C ++. Quello che vuoi invece è unsigned char(o, se hai bisogno esattamente di 8 bit, uint8_tda <cstdint>, da C ++ 11 ). Nota che charnon è necessariamente un'alternativa accurata, come significa signed charsu alcuni compilatori e unsigned charsu altri.
char, signed chare unsigned charsono tre tipi distinti. charha la stessa rappresentazione di uno degli altri due.
unsigned charè maggiore di 8 bit, uint8_tnon sarà definito.
<stdint.h>invece di <cstdint>.
Sì, c'è std::byte(definito in <cstddef>).
C ++ 17 lo ha introdotto.
std::bytenon può eseguire operazioni aritmetiche su di esso, il che potrebbe essere un insuccesso.
std::byteè solo un'aggiunta si può scegliere lo strumento giusto per il lavoro (cioè o std::byte, char, unsigned charo uint_8).
typedef unsigned char byte;o typedef std::uint8_t byte;?
char*, unsigned char*o std::byte*.
std::bytenon è possibile eseguire operazioni aritmetiche su di esso, il che potrebbe essere un insuccesso.
No, ma poiché C ++ 11 c'è [u] int8_t .
C'è anche byte_lite , compatibile con C ++ 98, C ++ 11 e versioni successive.
namespace std
{
// define std::byte
enum class byte : unsigned char {};
};
Questo se la tua versione C ++ non ha std :: byte definirà un tipo di byte nello spazio dei nomi std. Normalmente non vuoi aggiungere cose a std, ma in questo caso è una cosa standard che manca.
std :: byte da STL esegue molte più operazioni.
char.