C++1 には、アラインされていないメモリから整数値を取得できる標準機能がいくつかあることを知っています。このようなものをより標準的な方法で書くにはどうすればよいでしょうか?
template <class R>
inline R get_unaligned_le(const unsigned char p[], const std::size_t s) {
R r = 0;
for (std::size_t i = 0; i < s; i++)
r |= (*p++ & 0xff) << (i * 8); // take the first 8-bits of the char
return r;
}
リテ エンディアンの順序で格納されている値を取得するには、次のように記述できます。
uint_least16_t value1 = get_unaligned_le<uint_least16_t > (&buffer[0], 2);
uint_least32_t value2 = get_unaligned_le<uint_least32_t > (&buffer[2], 4);