Se existir, existe um arquivo de cabeçalho para incluir?
Este código dá erro de compilação:
#include <iostream>
using namespace std;
int main()
{
byte b = 2;
cout << b << endl;
return 0;
}
Se existir, existe um arquivo de cabeçalho para incluir?
Este código dá erro de compilação:
#include <iostream>
using namespace std;
int main()
{
byte b = 2;
cout << b << endl;
return 0;
}
char é necessariamente um byte. Só que um byte não é necessariamente 8 bits.
CHAR_BIT. Trabalhei em mais de um sistema embarcado em que os bytes não têm 8 bits de comprimento. Um char é definido para ter o tamanho 1, então sim, um char é sempre um byte.
char, que é de pelo menos 8 bits. O termo "byte" pode ser definido de maneira diferente em outros contextos, mas ao discutir C ou C ++, é melhor seguir a definição do padrão.
using byte = unsigned chare terminar com ele (como a resposta do rmp sugere)?
Respostas:
Não, não há tipo de dados de byte em C ++. No entanto, você sempre pode incluir o cabeçalho de bitset da biblioteca padrão e criar um typedef para byte:
typedef bitset<8> BYTE;
NB: Dado que WinDef.h define BYTE para código do Windows, você pode querer usar algo diferente de BYTE se sua intenção é direcionar o Windows.
Edit: Em resposta à sugestão de que a resposta está errada. A resposta não está errada. A pergunta era "Existe um tipo de dados 'byte' em C ++?". A resposta foi e é: "Não, não há tipo de dados de byte em C ++", conforme respondido.
Com relação à possível alternativa sugerida para a qual foi perguntado por que a alternativa sugerida é melhor?
De acordo com minha cópia do padrão C ++, na época:
"Objetos declarados como caracteres (char) devem ser grandes o suficiente para armazenar qualquer membro do conjunto de caracteres básicos da implementação": 3.9.1.1
Eu li isso para sugerir que, se uma implementação de compilador requer 16 bits para armazenar um membro do conjunto de caracteres básicos, o tamanho de um char seria de 16 bits. O fato de os compiladores de hoje tenderem a usar 8 bits para um char é uma coisa, mas pelo que eu posso dizer, certamente não há garantia de que serão 8 bits.
Por outro lado, "o bitset do modelo de classe <N> descreve um objeto que pode armazenar uma sequência consistindo de um número fixo de bits, N." : 20.5.1. Em outras palavras, ao especificar 8 como o parâmetro do modelo, acabo com um objeto que pode armazenar uma sequência de 8 bits.
Se a alternativa é melhor ou não para char, no contexto do programa que está sendo escrito, portanto, depende, tanto quanto eu entendo, embora possa estar errado, de seu compilador e seus requisitos no momento. Portanto, cabia ao indivíduo que redigia o código, no que me dizia respeito, determinar se a alternativa sugerida era apropriada para seus requisitos / desejos / necessidades.
bitset<8>melhor do que unsigned char?
std::byte
BIT_CHAR. É um mistério. Um mistério do universo ..
Não, não há nenhum tipo chamado " byte" em C ++. O que você quer em vez disso é unsigned char(ou, se você precisar exatamente 8 bits, uint8_ta partir <cstdint>, desde C ++ 11 ). Observe que charnão é necessariamente uma alternativa precisa, como significa signed charem alguns compiladores e unsigned charem outros.
char,, signed chare unsigned charsão três tipos distintos. chartem a mesma representação que um dos outros dois.
unsigned charfor maior que 8 bits, uint8_tnão será definido.
<stdint.h>vez de <cstdint>.
std::bytenão pode ter aritmética executada nele, o que pode ser um obstáculo.
std::byteé apenas uma adição pode-se escolher a ferramenta certa para o trabalho (ou seja, quer std::byte, char, unsigned charou uint_8).
typedef unsigned char byte;ou typedef std::uint8_t byte;?
char*, unsigned char*ou std::byte*.
std::byteque não pode haver aritmética executada nele, o que pode ser um obstáculo.
Não, mas desde C ++ 11 existe [u] int8_t .
Também há byte_lite , compatível com C ++ 98, C ++ 11 e posterior.
namespace std
{
// define std::byte
enum class byte : unsigned char {};
};
Isso se sua versão C ++ não tiver std :: byte definirá um tipo de byte no namespace std. Normalmente você não quer adicionar coisas a std, mas neste caso é uma coisa padrão que está faltando.
std :: byte do STL faz muito mais operações.
char.