C ++中是否有“字节”数据types?

如果存在包含头文件?

此代码给编译错误:

#include <iostream> using namespace std; int main() { byte b = 2; cout << b << endl; return 0; } 

不,在C ++中没有字节数据types。 但是,您可以始终包含标准库中的位集头,并为字节创build一个typedef:

 typedef bitset<8> BYTE; 

注意:鉴于WinDef.h为BYTE代码定义了窗口,如果您想要定位Windows,您可能需要使用除BYTE以外的其他内容。

编辑:回应build议,答案是错误的。 答案是没有错的。 问题是“在C ++中是否有'字节'数据types?”。 答案是:“不,C ++中没有字节数据types”。

关于build议的可能替代scheme,有人问为什么build议的替代scheme更好?

根据我的C ++标准副本,当时:

“声明为字符(char)的对象应该足够大,以存储实现基本字符集的任何成员”:3.9.1.1

我读了这个build议,如果编译器实现需要16位来存储基本字符集的成员,那么字符的大小将是16位。 今天的编译器倾向于使用8位字符是一回事,但据我所知,当然不能保证它是8位。

另一方面,“类模板位集<N>描述了一个可以存储由固定位数N组成的序列的对象。 :20.5.1。 换句话说,通过指定8作为模板参数,我最终得到一个可以存储由8位组成的序列的对象。

因此,在编写程序的背景下,替代scheme是否更好,以及据我所知,尽pipe我当时可能是错误的,但在编译器和你的要求方面却是错误的。 因此,就我个人而言,由个人编写代码来确定build议的替代scheme是否适合他们的需求/需求/需求。

不,在C ++中没有称为“ byte ”的types。 你想要的是unsigned char (或者,如果你需要正好8位,从<cstdint>uint8_t , 因为C + + 11 )。 请注意, char不一定是一个准确的select,因为它意味着在某些编译器上是有unsigned char在别人上是unsigned char

如果你使用Windows,在WinDef.h中你有:

 typedef unsigned char BYTE; 

使用C++11 ,手动定义的字节types有一个很好的版本:

 enum class byte : std::uint8_t {}; 

这至less是GSL所做的。

C++17 (几乎)开始,这个版本在标准中被定义为std::byte (对于两者,都要感谢Neil Macintosh)。

还没有 – 但C ++ 17将有std::byte (在<cstddef>定义)。

不,但是自从C ++ 11以来[int] int8_t 。

还有byte_lite ,与C ++ 98,C ++ 11和更高版本兼容。

为了向后兼容,请使用unsigned char