Подтвердить что ты не робот

Есть ли тип данных байта в С++?

Если существует файл заголовка для включения?

Этот код дает ошибку компиляции:

#include <iostream>

using namespace std;

int main()
{
    byte b = 2;

    cout << b << endl;

    return 0;
}
4b9b3361

Ответ 1

Нет никакого типа данных байтов в С++. Однако вы всегда можете включить заголовок битового набора из стандартной библиотеки и создать typedef для байта:

typedef bitset<8> BYTE;

Примечание. Учитывая, что WinDef.h определяет BYTE для кода Windows, вы можете использовать что-то иное, кроме BYTE, если вы намереваетесь настроить таргетинг на Windows.

Изменить: в ответ на предположение, что ответ неверен.  Ответ не тот. Вопрос: "Есть ли тип данных" байтов "в С++?". Ответ был и есть: "Нет байт-типа данных на С++", как было сказано.

Что касается предлагаемой возможной альтернативы, для которой было задано вопрос, почему предложенная альтернатива лучше?

Согласно моей копии стандарта С++, в то время:

"Объекты, объявленные как символы (char), должны быть достаточно большими, чтобы хранить любой элемент базового набора символов реализаций": 3.9.1.1

Я прочитал это, чтобы предположить, что если для реализации компилятора требуется 16 бит для хранения элемента базового набора символов, тогда размер char будет 16 бит. То, что сегодня компиляторы имеют тенденцию использовать 8 бит для char, это одно, но насколько я могу судить, конечно, нет гарантии, что это будет 8 бит.

С другой стороны, "бит-бит шаблона класса <N> описывает объект, который может хранить последовательность, состоящую из фиксированного количества бит, N.": 20.5.1. В других словах, указав 8 в качестве параметра шаблона, я получаю объект, который может хранить последовательность, состоящую из 8 бит.

Является ли альтернатива лучше char, в контексте написанной программы, поэтому зависит, насколько я понимаю, хотя я могу ошибаться, на ваш компилятор и ваши требования в то время. Поэтому, прежде всего, я должен написать код, насколько мне известно, чтобы определить, подходит ли предлагаемая альтернатива их требованиям/потребностям/потребностям.

Ответ 2

Нет, в С++ нет типа "byte". Вместо этого вам нужно unsigned char (или, если вам нужно ровно 8 бит, uint8_t от <cstdint>, с С++ 11). Обратите внимание, что char не обязательно является точной альтернативой, так как это означает signed char для некоторых компиляторов и unsigned char для других.

Ответ 3

Если вы используете окна, в WinDef.h у вас есть:

typedef unsigned char BYTE;

Ответ 4

С помощью C++11 есть хорошая версия для определенного вручную типа байта:

enum class byte : std::uint8_t {};

Это по крайней мере то, что делает GSL.

Начиная с C++17 (почти) эта самая версия определена в стандарте как std::byte (спасибо Neil Macintosh для обоих).

Ответ 6

Нет, но с С++ 11 есть [u] int8_t.

Ответ 7

Там также byte_lite, совместимый с С++ 98, С++ 11 и более поздними версиями.

Ответ 8

Пожалуйста, используйте unsigned char всегда для обратной совместимости.