在C ++中用于字节操作uint8或char的是什么?

时间:2012-12-08 14:48:01

标签: c++

我来自Java到C ++,我需要类似于Java的byte[]。我可以使用std::vector<>进行简单的数组操作,但我需要回答C ++中用于字节操作uint8char的内容吗? (我有很多关于在数组中使用&amp; 0xff和&gt;&gt;数字填充更大的整数,所以它需要很快)

2 个答案:

答案 0 :(得分:3)

假设uint8是8位无符号整数类型,“正常”C ++实现的主要区别是char不一定是无符号的。

在“不正常”的C ++实现中,可能存在更显着的差异 - char可能不是8位。但是,那么你将uint8定义为什么样的实现呢?

符号差异是否重要取决于您使用它的方式,但根据经验,最好使用带有按位运算符的无符号类型。也就是说,无论如何,它们都按位int升级到&(再次在“普通”C ++实现中),它对&无关紧要,它不会导致实践中的惊喜。但是对负签名值使用<<会导致未定义的行为,因此请避免使用。

因此,请使用无符号类型。如果您编写的最方便的方法是uint8,并且您知道您的代码以八位字节处理并且只在char是八位字节的系统上运行,那么您也可以使用它。

如果您想使用标准类型,请使用unsigned char。或uint8_t,以便故意阻止您的代码编译{not}不是八位字节的“非正常”实现。

答案 1 :(得分:1)

C ++保留字为charsigned char和/或unsigned charuint8可能是unsigned char的typedef同义词。