Is reinterpret_cast
safe for this, and is it the best way to do this?
For example, in the code below, I have a class called ibytestream
, which allows the reading of uint16_t
s and int16_t
s from it. ibytestream::next
is a vector<unsigned char>::iterator
.
inline ibytestream& operator>>(ibytestream& stream, uint16_t& data) {
data = 0;
data |= *stream.next++;
data <<= 8;
data |= *stream.next++;
return stream;
}
inline ibytestream& operator>>(ibytestream& stream, int16_t& data) {
return stream >> reinterpret_cast<uint16_t&>(data);
}
I don't want to duplicate the code for converting the bytes to an integer, so I used reinterpret_cast
for the signed version to reuse the code from the unsigned version. It works fine on my machine, but will it work in general on other modern machines?