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
。