1. ホーム
  2. c++

[解決済み] C++に'byte'データ型はありますか?

2022-03-01 15:26:09

質問

インクルードするヘッダーファイルはありますか?

このコードはコンパイルエラーになります。

#include <iostream>

using namespace std;

int main()
{
    byte b = 2;

    cout << b << endl;

    return 0;
}

解決方法は?

C++にはbyteデータ型はありません。しかし、標準ライブラリのbitsetヘッダをインクルードして、byteのtypedefを作成することは可能です。

typedef bitset<8> BYTE;

注:WinDef.hはWindowsのコードにBYTEを定義しているので、Windowsをターゲットにする場合は、BYTE以外のものを使用したほうがいいかもしれません。

編集部:答えが間違っているという指摘にお答えします。 答えは間違っていません。質問は、「C++に'byte'データ型はあるか」です。答えは、「C++にbyteデータ型はありません」です。

質問された可能性のある代替案に関して、なぜその代替案が良いのですか?

当時の私のC++規格のコピーによると。

文字(char)として宣言されたオブジェクトは、実装の基本文字セットの任意のメンバーを格納するのに十分な大きさでなければならない。3.9.1.1

もし、コンパイラの実装が基本文字セットを格納するために16ビットを必要とするならば、charのサイズは16ビットであることを示唆していると私は読みました。現在のコンパイラがcharに8ビットを使用する傾向があることは一つの事実ですが、私の知る限りでは、確かに8ビットであるという保証はないようです。

一方、クラステンプレートbitset<N>は、固定ビット数Nからなるシーケンスを格納することができるオブジェクトを記述します。つまり、テンプレート・パラメータに8を指定することで、8ビットからなるシーケンスを格納することができるオブジェクトを得ることができるのです。

そのため、書いているプログラムの文脈で、charという選択肢が良いかどうかは、間違っているかもしれませんが、私の理解では、コンパイラとその時の要件に依存します。したがって、私が知る限り、コードを書いている個人が、提案された代替案が自分の要件/要望/必要性に適しているかどうかを判断する必要があるのです。