У меня есть этот код:
std::string GetBinary32( double value )
{
union
{
float input; // assumes sizeof(float) == sizeof(int)
int output;
} data;
data.input = value;
std::bitset<sizeof(float) * CHAR_BIT> bits(data.output);
std::string mystring = bits.to_string<char, std::char_traits<char>, std::allocator<char> >();
return mystring;
}
Я хочу получить 64 представления двойника.
что мне нужно изменить?
Прежде всего, хотя метод объединения является популярным для этого, имейте в виду, что доступ к члену объединения, отличному от последнего написанного члена, не определено поведение в C ++. Так что лучше тестируйте результат на своем компиляторе и забудьте о переносимости.
При этом предполагается, что ваш компилятор использует IEE754 (это можно проверить, как упоминалось Вот ), вам нужно будет изменить свой союз, чтобы он содержал двойной и длинный лонг. Long long будет использоваться как на 32-битных, так и на 64-битных компьютерах, представленных на 64-битных системах как стандарт де-факто для Windows и Unix (хотя стандарт C ++ не навязывает ничего по размеру, а только по диапазонам и порядку размера между char, int , долго и т.д …).
И, конечно, адаптируйте переменную битов с помощью sizeof (double)
Других решений пока нет …