War*_*ung 21
如果您使用的是C99或更新版本,则应使用stdint.h此功能. uint8_t, 在这种情况下.
在C++ 11调用它之前,C++没有得到这个标题cstdint.旧版本的Visual C++不允许您stdint.h在C++代码中使用C99 ,但几乎所有其他C++ 98编译器都使用C99 ,因此即使使用旧编译器也可以使用该选项.
正如许多其他事情一样,Boost就这种差异提出了论文boost/integer.hpp,提供了诸如uint8_t编译器的标准C++库之类的东西.
我建议如果您的编译器支持它,请使用C99 <stdint.h>标头类型,如uint8_t和int8_t.
如果您的编译器不支持它,请创建一个.这是VC++ 的一个例子,其旧版本没有stdint.h. 海湾合作委员会确实支持stdint.h,实际上大多数是C99
您的建议的一个问题是标识char是实现定义的,因此如果您确实创建了类型别名.你应该至少明确一下这个标志.这个想法有一些优点,因为在C#中例如a char是16位.但它也有一个字节类型.
附加说明......
您的建议没有问题,实际上您确实指定了未签名.
我还建议char如果数据实际上是字符数据则使用plain ,即可以显示在控制台上的纯文本表示.使用标准库和第三方库时,这将减少类型协议问题.另一方面,如果数据表示非字符实体(如位图),或者如果它是数字'小整数'数据,您可以在其上执行算术操作,或者您将执行逻辑操作的数据,则其中一个stdint.h应该使用类型(甚至是从其中一个定义的类型).
我最近遇到了TI C54xx编译器,char其实际上是16位,所以这就是为什么在可能的情况下使用stdint.h,即使你使用它然后定义一个byte类型,最好假设它unsigned char是一个合适的别名.