我来自Java到C ++,我需要类似于Java的byte[]
。我可以使用std::vector<>
进行简单的数组操作,但我需要回答C ++中用于字节操作uint8
或char
的内容吗? (我有很多关于在数组中使用&amp; 0xff和&gt;&gt;数字填充更大的整数,所以它需要很快)
答案 0 :(得分:3)
假设uint8
是8位无符号整数类型,“正常”C ++实现的主要区别是char
不一定是无符号的。
在“不正常”的C ++实现中,可能存在更显着的差异 - char
可能不是8位。但是,那么你将uint8
定义为什么样的实现呢?
符号差异是否重要取决于您使用它的方式,但根据经验,最好使用带有按位运算符的无符号类型。也就是说,无论如何,它们都按位int
升级到&
(再次在“普通”C ++实现中),它对&
无关紧要,它不会导致实践中的惊喜。但是对负签名值使用<<
会导致未定义的行为,因此请避免使用。
因此,请使用无符号类型。如果您编写的最方便的方法是uint8
,并且您知道您的代码以八位字节处理并且只在char
是八位字节的系统上运行,那么您也可以使用它。
如果您想使用标准类型,请使用unsigned char
。或uint8_t
,以便故意阻止您的代码编译{not}不是八位字节的“非正常”实现。
答案 1 :(得分:1)
C ++保留字为char
,signed char
和/或unsigned char
。 uint8
可能是unsigned char
的typedef同义词。