Если существует, нужно ли включить заголовочный файл?
Этот код дает ошибку компиляции:
#include <iostream>
using namespace std;
int main()
{
byte b = 2;
cout << b << endl;
return 0;
}
Если существует, нужно ли включить заголовочный файл?
Этот код дает ошибку компиляции:
#include <iostream>
using namespace std;
int main()
{
byte b = 2;
cout << b << endl;
return 0;
}
char - это обязательно один байт. Просто байт не обязательно 8 бит.
CHAR_BIT. Я работал над более чем одной встроенной системой, в которой байты не имеют длины 8 бит. Размер char определен как 1, так что да, char всегда является байтом.
char, который составляет не менее 8 бит. Термин «байт» может быть определен по-разному в других контекстах, но при обсуждении C или C ++ лучше придерживаться определения стандарта.
using byte = unsigned charи делать с ним заметки (как предлагает ответ rmp)?
Ответы:
Нет, в C ++ нет байтового типа данных. Однако вы всегда можете включить заголовок битового набора из стандартной библиотеки и создать typedef для байта:
typedef bitset<8> BYTE;
NB: Учитывая, что WinDef.h определяет BYTE для кода Windows, вы можете использовать что-то другое, кроме BYTE, если вы собираетесь настроить таргетинг на Windows.
Изменить: в ответ на предположение, что ответ неверен. Ответ не ошибочный. Возник вопрос: «Есть ли в C ++ байтовый тип данных?». Ответ был и есть: «Нет, в C ++ нет байтового типа данных», как ответил.
Что касается предложенной возможной альтернативы, для которой спросили, почему предлагаемая альтернатива лучше?
Согласно моей копии стандарта C ++, в то время:
«Объекты, объявленные как символы (char), должны быть достаточно большими, чтобы хранить любой член базового набора символов реализации»: 3.9.1.1
Я прочитал это, чтобы предположить, что если реализация компилятора требует 16 бит для хранения члена базового набора символов, то размер char будет 16 бит. То, что современные компиляторы обычно используют 8 бит для char, - это одно, но, насколько я могу судить, нет никакой гарантии, что это будет 8 бит.
С другой стороны, «битовый набор <N> шаблона класса описывает объект, который может хранить последовательность, состоящую из фиксированного числа битов, N.» : 20.5.1. Другими словами, указав 8 в качестве параметра шаблона, я получаю объект, который может хранить последовательность, состоящую из 8 бит.
Таким образом, насколько я понимаю, хотя я могу ошибаться, лучше или лучше использовать char в контексте пишущейся программы, от вашего компилятора и ваших требований в то время. Поэтому, насколько я понимаю, человек, писавший код, должен был определить, соответствует ли предложенная альтернатива его требованиям / желаниям / потребностям.
bitset<8>лучше чем unsigned char?
std::byte
BIT_CHAR. Это тайна. Тайна вселенной ..
Нет, byteв C ++ нет типа " ". Вместо этого вы хотитеunsigned char (или, если вам нужно точно 8 бит, uint8_tиз <cstdint>, так как C ++ 11 ). Обратите внимание, что charэто не обязательно точная альтернатива, как signed charдля одних компиляторов, так и unsigned charдля других.
char, signed charИ unsigned charтри различных типа. charимеет то же представление, что и один из двух других.
unsigned charбольше 8 бит, то uint8_tне будет определен.
<stdint.h>вместо <cstdint>.
std::byteне может выполнять арифметические операции, что может нарушить условия сделки.
std::byteэто всего лишь дополнение можно выбрать правильный инструмент для работы (т.е. либо std::byte, char, unsigned charили uint_8).
typedef unsigned char byte;или typedef std::uint8_t byte;?
char*, unsigned char*или std::byte*.
std::byteтого, что над ним нельзя выполнять арифметические операции, что может помешать сделке.
Нет, но начиная с C ++ 11 существует [u] int8_t .
Также есть byte_lite , совместимый с C ++ 98, C ++ 11 и новее.
namespace std
{
// define std::byte
enum class byte : unsigned char {};
};
Это, если ваша версия C ++ не имеет std :: byte, будет определять тип байта в пространстве имен std. Обычно вы не хотите добавлять что-либо в std, но в данном случае это стандартная вещь, которой не хватает.
std :: byte из STL выполняет гораздо больше операций.
char.