Varsa eklenecek başlık dosyası var mı?
Bu kod derleme hatası veriyor:
#include <iostream>
using namespace std;
int main()
{
byte b = 2;
cout << b << endl;
return 0;
}
Varsa eklenecek başlık dosyası var mı?
Bu kod derleme hatası veriyor:
#include <iostream>
using namespace std;
int main()
{
byte b = 2;
cout << b << endl;
return 0;
}
char olduğu mutlaka bir bayt. Sadece bir baytın mutlaka 8 bit olması gerekmez.
CHAR_BIT. Baytların 8 bit uzunluğunda olmadığı birden fazla gömülü sistem üzerinde çalıştım. Bir karakter 1 boyutuna sahip olacak şekilde tanımlanır, yani evet, bir karakter her zaman bir bayttır.
char, en az 8 bit olan a'nın boyutu olarak bir "bayt" ı açık bir şekilde tanımlar . "Bayt" terimi diğer bağlamlarda farklı şekilde tanımlanabilir, ancak C veya C ++ 'dan bahsederken standardın tanımına bağlı kalmak daha iyidir.
using byte = unsigned charonunla yapılmalı (rmp'nin cevabının önerdiği gibi)?
Yanıtlar:
C ++ 'da bayt veri türü yoktur. Bununla birlikte, her zaman standart kitaplıktan bit kümesi başlığını dahil edebilir ve bayt için bir typedef oluşturabilirsiniz:
typedef bitset<8> BYTE;
Not: WinDef.h'nin Windows kodu için BYTE'yi tanımladığı göz önüne alındığında, Windows'u hedeflemeyi planlıyorsanız BYTE dışında bir şey kullanmak isteyebilirsiniz.
Düzenleme: Cevabın yanlış olduğu önerisine yanıt olarak. Cevap yanlış değil. Soru, "C ++ 'da bir' bayt 'veri türü var mı?" İdi. Cevap şuydu ve şu şekildedir: "Hayır, C ++ 'da bayt veri türü yoktur".
Önerilen olası alternatifle ilgili olarak sorulduğu gibi, önerilen alternatif neden daha iyi?
O zamanki C ++ standardı kopyama göre:
"Karakter (char) olarak bildirilen nesneler, uygulamanın temel karakter kümesinin herhangi bir üyesini saklayacak kadar büyük olacaktır": 3.9.1.1
Bir derleyici uygulamasının temel karakter kümesinin bir üyesini depolamak için 16 bit gerektirmesi durumunda bir karakterin boyutunun 16 bit olacağını önermek için okudum. Bugünün derleyicilerinin bir karakter için 8 bit kullanma eğilimi olması bir şeydir, ancak söyleyebileceğim kadarıyla 8 bit olacağına dair kesinlikle bir garanti yok.
Öte yandan, "sınıf şablonu bit kümesi <N> sabit sayıda bit N'den oluşan bir diziyi depolayabilen bir nesneyi tanımlar." : 20.5.1. Diğer bir deyişle şablon parametresi olarak 8 belirterek, sonunda 8 bitten oluşan bir diziyi saklayabilen bir nesne elde ediyorum.
Alternatifin yazılan program bağlamında char için daha iyi olup olmadığı, bu nedenle, anladığım kadarıyla, yanılsam da, derleyicinize ve o andaki gereksinimlerinize bağlıdır. Bu nedenle, bana göre, önerilen alternatifin kendi gereksinimleri / istekleri / ihtiyaçları için uygun olup olmadığını belirlemek, kodu yazan kişiye kalmıştı.
bitset<8>iyi unsigned char?
std::byte
BIT_CHAR. Bu bir gizem. Evrenin bir sır ..
Hayır, byteC ++ 'da " " adlı bir tür yoktur . Bunun yerine ne istiyor ise unsigned char(eğer tam 8 bit gerekiyorsa, ya uint8_tdan <cstdint>, C beri ++ 11 ). Bazı derleyicilerde ve diğerlerinde charolduğu gibi, bunun mutlaka doğru bir alternatif olmadığını unutmayın .signed charunsigned char
char, signed charve unsigned charüç farklı türdür. chardiğer ikisinden biriyle aynı temsile sahiptir.
unsigned char8 bitten daha büyük, daha sonra uint8_ttanımlanan edilmeyecektir.
<stdint.h>bunun yerine eklemeniz gerekebilir <cstdint>.
std::byteüzerinde aritmetik uygulanamaz, bu da bir anlaşma kırıcı olabilir.
std::bytesadece bir ektir biri (yani her iki iş için doğru aracı seçebilir std::byte, char, unsigned charveya uint_8).
typedef unsigned char byte;veya değerinden daha iyi typedef std::uint8_t byte;?
char*, ihtiyacınız olan bazı baytlar , unsigned char*veya std::byte*.
std::bytebir anlaşma kırıcı olabilecek aritmetik uygulanamaz.
Hayır, ancak C ++ 11'den beri [u] int8_t var .
Ayrıca C ++ 98, C ++ 11 ve üstü ile uyumlu byte_lite var .
namespace std
{
// define std::byte
enum class byte : unsigned char {};
};
Bu, C ++ sürümünüzde std :: bayt yoksa, ad alanı std'de bir bayt türü tanımlayacaktır. Normalde std'ye bir şeyler eklemek istemezsiniz, ancak bu durumda eksik olan standart bir şeydir.
STL'deki std :: byte çok daha fazla işlem yapar.
char.