I am coming from Java to C++ and I need something similar to byte[]
from Java. I can use std::vector<>
for easy array like manipulation but I need answer what is practiced in C++ to use for byte manipulation uint8
or char
? ( I have lot off packing bigger integers in arrays with & 0xff and >> number so it need to be quick)
2 回答
Assuming that uint8
is an 8 bit unsigned integer type, the main difference on a "normal" C++ implementation is that char
is not necessarily unsigned.
On "not normal" C++ implementations, there could be more significant differences -- char
might not be 8 bits. But then, what would you define uint8
to be on such an implementation anyway?
Whether the sign difference matters or not depends how you're using it, but as a rule of thumb it's best to use unsigned types with bitwise operators. That said, they both get promoted to int
in bitwise &
anyway (again on a "normal" C++ implementation) and it really doesn't matter for &
, it doesn't cause surprises in practice. But using <<
on a negative signed value results in undefined behavior, so avoid that.
So, use an unsigned type. If the most convenient way for you to write that is uint8
, and you know that your code deals in octets and will only run on systems where char
is an octet, then you may as well use it.
If you want to use a standard type, use unsigned char
. Or uint8_t
in order to deliberately prevent your code compiling on "not normal" implementations where char
is not an octet.
C++ reserved words are char
, signed char
, and/or unsigned char
. uint8
is probably a typedef synonym for unsigned char
.