Si existe, ¿hay un archivo de encabezado para incluir?
Este código da error de compilación:
#include <iostream>
using namespace std;
int main()
{
byte b = 2;
cout << b << endl;
return 0;
}
Si existe, ¿hay un archivo de encabezado para incluir?
Este código da error de compilación:
#include <iostream>
using namespace std;
int main()
{
byte b = 2;
cout << b << endl;
return 0;
}
char es necesariamente un byte. Es solo que un byte no es necesariamente de 8 bits.
CHAR_BIT. He trabajado en más de un sistema integrado donde los bytes no tienen una longitud de 8 bits. Un char se define para tener un tamaño de 1, así que sí, un char es siempre un byte.
char, que es de al menos 8 bits. El término "byte" puede definirse de forma diferente en otros contextos, pero cuando se habla de C o C ++ es mejor ceñirse a la definición del estándar.
using byte = unsigned chary terminar con él (como sugiere la respuesta de rmp)?
Respuestas:
No, no hay ningún tipo de datos de bytes en C ++. Sin embargo, siempre puede incluir el encabezado del conjunto de bits de la biblioteca estándar y crear un typedef para byte:
typedef bitset<8> BYTE;
NB: Dado que WinDef.h define BYTE para el código de Windows, es posible que desee utilizar algo diferente a BYTE si tiene la intención de apuntar a Windows.
Editar: en respuesta a la sugerencia de que la respuesta es incorrecta. La respuesta no es incorrecta. La pregunta era "¿Existe un tipo de datos 'byte' en C ++?". La respuesta fue y es: "No, no hay un tipo de datos de bytes en C ++" como se respondió.
Con respecto a la posible alternativa sugerida para la cual se preguntó, ¿por qué es mejor la alternativa sugerida?
Según mi copia del estándar C ++, en ese momento:
"Los objetos declarados como caracteres (char) deberán ser lo suficientemente grandes para almacenar cualquier miembro del juego de caracteres básico de las implementaciones": 3.9.1.1
Leí eso para sugerir que si la implementación de un compilador requiere 16 bits para almacenar un miembro del conjunto de caracteres básico, entonces el tamaño de un carácter sería de 16 bits. Que los compiladores de hoy tienden a usar 8 bits para un carácter es una cosa, pero por lo que puedo decir, ciertamente no hay garantía de que sea de 8 bits.
Por otro lado, "el conjunto de bits de plantilla de clase <N> describe un objeto que puede almacenar una secuencia que consta de un número fijo de bits, N." : 20.5.1. En otras palabras, al especificar 8 como parámetro de plantilla, termino con un objeto que puede almacenar una secuencia que consta de 8 bits.
Que la alternativa sea mejor o no para char, en el contexto del programa que se está escribiendo, depende, por lo que yo entiendo, aunque puedo estar equivocado, de su compilador y de sus requisitos en ese momento. Por lo tanto, dependía de la persona que escribía el código, en lo que a mí respecta, determinar si la alternativa sugerida era apropiada para sus requisitos / deseos / necesidades.
bitset<8>mejor que unsigned char?
std::byte
BIT_CHAR? Es un misterio. Un misterio del universo ..
No, no hay ningún tipo llamado " byte" en C ++. Lo que quiere en cambio, es unsigned char(o, si se necesita exactamente 8 bits, uint8_ta partir <cstdint>, ya que C ++ 11 ). Tenga en cuenta que charno es necesariamente una alternativa precisa, como significa signed charen algunos compiladores y unsigned charen otros.
char, signed chary unsigned charson tres tipos distintos. chartiene la misma representación que uno de los otros dos.
unsigned chares mayor de 8 bits, uint8_tno se definirá.
<stdint.h>lugar de <cstdint>.
Sí, hay std::byte(definido en <cstddef>).
C ++ 17 lo introdujo.
std::byteno se puede realizar aritmética en él, lo que podría ser un factor decisivo.
std::bytees sólo una adición uno puede elegir la herramienta adecuada para el trabajo (es decir, bien std::byte, char, unsigned charo uint_8).
typedef unsigned char byte;o typedef std::uint8_t byte;?
char*, unsigned char*o std::byte*.
std::byteque no se puede realizar operaciones aritméticas en él, lo que podría ser un factor decisivo.
No, pero desde C ++ 11 hay [u] int8_t .
También hay byte_lite , compatible con C ++ 98, C ++ 11 y posteriores.
namespace std
{
// define std::byte
enum class byte : unsigned char {};
};
Esto, si su versión de C ++ no tiene std :: byte, definirá un tipo de byte en el espacio de nombres std. Normalmente no desea agregar cosas a std, pero en este caso es una cosa estándar que falta.
std :: byte del STL hace muchas más operaciones.
char.