Вы используете VC10?Уже сообщается о проблеме: Microsoft connect. Также я могу предположить, что вы могли бы исправить это, приведя тип к int, если он 32-битный, например:
string s = ToBinary(*reinterpret_cast<int*>(&buffer_u[1]));
Это также можно сделать внутри метода, если это необходимо.Однако результат переосмысления больше не должен использоваться для арифметики.;)
Работает нормально, как обходной путь для меня (но выглядит довольно некрасиво)
template<typename T>
std::string ToBinary(const T& value)
{
switch (sizeof(T))
{
case 8:
return std::bitset<std::numeric_limits<T>::digits + 1>(*reinterpret_cast<const long*>(&value)).to_string();
case 4:
return std::bitset<std::numeric_limits<T>::digits + 1>(*reinterpret_cast<const int*>(&value)).to_string();
case 2:
return std::bitset<std::numeric_limits<T>::digits + 1>(*reinterpret_cast<const short*>(&value)).to_string();
case 1:
return std::bitset<std::numeric_limits<T>::digits + 1>(*reinterpret_cast<const char*>(&value)).to_string();
}
return "n/a";
}