Является ли reinterpret_cast
безопасным для этого, и это лучший способ сделать это?
Например, в приведенном ниже коде у меня есть класс с именем ibytestream
, который позволяет читать из него uint16_t
s и int16_t
s. ibytestream::next
это 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);
}
Я не хочу дублировать код для преобразования байтов в целое число, поэтому я использовал reinterpret_cast
для версии со знаком, чтобы повторно использовать код из версии без знака. На моей машине работает нормально, но будет ли вообще работать на других современных машинах?