2012-12-08 37 views
0

我来自Java到C++,我需要类似于Java的byte[]。我可以使用std::vector<>来进行简单的数组操作,但我需要回答在C++中使用的字节操作uint8char? (我有很多关在阵列包装更大的整数与& 0xFF和>>号码,以便它必须是快速的)C++中用于字节操作uint8或char的是什么?

+1

在C++中没有'uint8'这样的类型。 –

+0

我想知道你为什么使用''uint8'' /''char''如果你打包更大的整数。是否有任何理由不留在更大的整数表示中? –

回答

3

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

在“不正常的”C++实现上,可能会有更大的差异 - char可能不是8位。但是,那么你会怎么定义uint8来实现这样的实现呢?

符号差异是否重要取决于您使用它的方式,但根据经验,最好使用带位运算符的无符号类型。也就是说,无论如何它们都被升级到int(又一次在“正常”的C++实现中),并且它对于&真的没有关系,它在实践中并不会引起意外。但使用<<上的负值有符号值会导致未定义的行为,所以请避免这种情况。

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

如果要使用标准类型,请使用unsigned char。或uint8_t为了有意防止您的代码在“非正常”实现上编译,其中char不是八位字节。

1

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