2012-12-08 36 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同義詞。