C ++에 ‘바이트’데이터 유형이 있습니까? namespace std; int main() {

포함 할 헤더 파일이있는 경우

이 코드는 컴파일 오류를 제공합니다.

#include <iostream>

using namespace std;

int main()
{
    byte b = 2;

    cout << b << endl;

    return 0;
}



답변

C ++에는 바이트 데이터 유형이 없습니다. 그러나 항상 표준 라이브러리의 bitset 헤더를 포함하고 바이트에 대한 typedef를 만들 수 있습니다.

typedef bitset<8> BYTE;

NB : WinDef.h가 Windows 코드에 대해 BYTE를 정의한다는 점을 감안할 때 Windows를 대상으로하려는 경우 BYTE가 아닌 다른 것을 사용할 수 있습니다.

편집 : 답이 틀렸다는 제안에 대한 응답으로. 대답은 틀리지 않습니다. 질문은 “C ++에 ‘바이트’데이터 유형이 있습니까?”였습니다. 대답은 “C ++에는 바이트 데이터 유형이 없습니다”입니다.

제안 된 가능한 대안과 관련하여 제안 된 대안이 더 나은 이유는 무엇입니까?

당시 C ++ 표준 사본에 따르면 다음과 같습니다.

“문자 (char)로 선언 된 객체는 구현 기본 문자 집합의 구성원을 저장할 수있을만큼 충분히 커야합니다.”: 3.9.1.1

컴파일러 구현에서 기본 문자 집합의 구성원을 저장하는 데 16 비트가 필요한 경우 문자의 크기는 16 비트가 될 것이라고 제안했습니다. 오늘날의 컴파일러는 문자에 8 비트를 사용하는 경향이 있지만 내가 말할 수있는 한 그것이 8 비트가 될 것이라는 보장은 확실히 없습니다.

반면, “클래스 템플릿 bitset <N>은 고정 된 수의 비트 N으로 구성된 시퀀스를 저장할 수있는 객체를 설명합니다.” : 20.5.1. 즉, 8을 템플릿 매개 변수로 지정하여 8 비트로 구성된 시퀀스를 저장할 수있는 객체로 끝납니다.

작성되는 프로그램의 맥락에서 대안이 char보다 더 나은지 여부는 내가 이해하는 한, 비록 내가 틀렸을지라도 컴파일러와 그 당시의 요구 사항에 달려 있습니다. 따라서 제안 된 대안이 요구 사항 / 원하는 / 필요한 사항에 적합한 지 여부를 결정하는 것은 내가 아는 한 코드를 작성하는 개인에게 달려 있습니다.


답변

아니요, byteC ++ 에는 ” ” 라는 유형이 없습니다 . 당신이 대신 원하는 것은 unsigned char(당신이, 정확하게 8 개 비트를 필요로하는 경우, 또는 uint8_t에서 <cstdint>, C부터 + 11 ). 참고 char뜻으로, 반드시 정확한 대안이없는 signed char일부 컴파일러와 unsigned char다른 사람.


답변

예, 있습니다 std::byte(에서 정의 됨 <cstddef>).

C ++ 17에서 도입했습니다.


답변

Windows를 사용하는 경우 WinDef.h에 다음이 있습니다.

typedef unsigned char BYTE;


답변

사용하여 C++11수동으로 정의 바이트 유형에 대한 좋은 버전이 있습니다 :

enum class byte : std::uint8_t {};

그것은 적어도 GSL이하 는 일입니다.

시작 C++17(거의)이 매우 버전과 표준에 정의되어있다 std::byte(모두 감사 닐 Macintosh)를 선택합니다.


답변

아니요,하지만 C ++ 11부터 [u] int8_t가 있습니다.


답변

byte_lite있습니다C ++ 98, C ++ 11 이상과 호환되는 .