Jeśli istnieje, czy istnieje plik nagłówkowy do dołączenia?
Ten kod daje błąd kompilacji:
#include <iostream>
using namespace std;
int main()
{
byte b = 2;
cout << b << endl;
return 0;
}
Jeśli istnieje, czy istnieje plik nagłówkowy do dołączenia?
Ten kod daje błąd kompilacji:
#include <iostream>
using namespace std;
int main()
{
byte b = 2;
cout << b << endl;
return 0;
}
char to koniecznie jeden bajt. Po prostu bajt to niekoniecznie 8 bitów.
CHAR_BIT. Pracowałem na więcej niż jednym systemie osadzonym, w którym bajty nie mają długości 8 bitów. Zdefiniowano znak, który ma rozmiar 1, więc tak, znak jest zawsze bajtem.
char, który ma co najmniej 8 bitów. Termin „bajt” może być zdefiniowany inaczej w innych kontekstach, ale omawiając C lub C ++ lepiej trzymać się definicji standardu.
using byte = unsigned chari robić z nim (jak sugeruje odpowiedź rmp)?
Odpowiedzi:
Nie, w C ++ nie ma bajtowego typu danych. Jednak zawsze możesz dołączyć nagłówek bitset z biblioteki standardowej i utworzyć typedef dla bajtu:
typedef bitset<8> BYTE;
Uwaga: Biorąc pod uwagę, że WinDef.h definiuje BYTE dla kodu Windows, możesz chcieć użyć czegoś innego niż BYTE, jeśli zamierzasz używać Windowsa.
Edycja: w odpowiedzi na sugestię, że odpowiedź jest nieprawidłowa. Odpowiedź nie jest zła. Pytanie brzmiało: „Czy istnieje typ danych„ bajt ”w C ++?”. Odpowiedź brzmiała i brzmi: „Nie, nie ma bajtowego typu danych w C ++”.
W odniesieniu do sugerowanej możliwej alternatywy, dla której zadano pytanie, dlaczego sugerowana alternatywa jest lepsza?
Według mojej kopii standardu C ++ w tamtym czasie:
„Obiekty zadeklarowane jako znaki (znaki) powinny być wystarczająco duże, aby przechowywać dowolny element z podstawowego zestawu znaków implementacji”: 3.9.1.1
Czytałem to, aby zasugerować, że jeśli implementacja kompilatora wymaga 16 bitów do przechowywania elementu podstawowego zestawu znaków, to rozmiar znaku będzie wynosił 16 bitów. To, że dzisiejsze kompilatory zwykle używają 8 bitów na znak, to jedno, ale z tego co wiem, z pewnością nie ma gwarancji, że będzie to 8 bitów.
Z drugiej strony „zestaw bitów szablonu klasy <N> opisuje obiekt, który może przechowywać sekwencję składającą się z ustalonej liczby bitów, N.” : 20.5.1. Innymi słowy, podając 8 jako parametr szablonu, otrzymuję obiekt, który może przechowywać sekwencję składającą się z 8 bitów.
To, czy alternatywa jest lepsza, czy nie, w kontekście pisanego programu, zależy więc, o ile rozumiem, chociaż mogę się mylić, od twojego kompilatora i twoich wymagań w tym czasie. W związku z tym do osoby piszącej kod, jeśli o mnie chodzi, należało określenie, czy sugerowana alternatywa była odpowiednia dla ich wymagań / pragnień / potrzeb.
bitset<8>lepszy niż unsigned char?
std::byte
BIT_CHAR. To tajemnica. Tajemnica wszechświata ..
Nie, bytew C ++ nie ma typu „ ”. Zamiast tego chcesz unsigned char(lub, jeśli potrzebujesz dokładnie 8 bitów, uint8_tod <cstdint>, od C ++ 11 ). Zauważ, że charniekoniecznie jest to dokładna alternatywa, ponieważ oznacza to signed charna niektórych kompilatorach i unsigned charna innych.
char, signed chari unsigned charsą trzema różnymi typami. charma taką samą reprezentację jak jeden z dwóch pozostałych.
unsigned charjest większy niż 8 bitów, uint8_tnie zostanie zdefiniowany.
<stdint.h>zamiast <cstdint>.
std::bytenie może wykonać na nim arytmetyki, co może spowodować przerwanie transakcji.
std::bytejest to tylko dodatek można wybrać odpowiednie narzędzia do pracy (czyli albo std::byte, char, unsigned charlub uint_8).
typedef unsigned char byte;lub typedef std::uint8_t byte;?
char*, unsigned char*lub std::byte*.
std::bytetego, że nie można wykonać na nim arytmetyki, co może być przełomem.
Nie, ale od C ++ 11 istnieje [u] int8_t .
Jest też byte_lite , kompatybilny z C ++ 98, C ++ 11 i nowszymi.
namespace std
{
// define std::byte
enum class byte : unsigned char {};
};
Dzieje się tak, jeśli Twoja wersja C ++ nie ma std :: byte zdefiniuje typ bajtu w przestrzeni nazw std. Zwykle nie chcesz dodawać rzeczy do std, ale w tym przypadku brakuje standardowej rzeczy.
std :: byte z STL wykonuje znacznie więcej operacji.
char.