2015-03-14 3 views
0

Я хочу преобразовать двойной массив символов длиной 8 символов в C++. Проблема в том, что я хочу охватить все количество байтов двойного типа (double не всегда 8 байтов в C++).Преобразование массива символов длиной до 8 символов в C++

Массив символов используется только для хранения байтов двойника, как если бы тип char = байтовый тип.

Любые идеи?

ответ

2

Да, вы всегда можете рассматривать любой объект как массив байтов. Чтобы получить доступ к байтам, используйте переинтерпретировать-бросок:

T x; // any object 

unsigned char const * bytes = reinterpret_cast<unsigned char const *>)(&x); 

for (std::size_t i = 0; i != sizeof(T); ++i) 
{ 
    std::fprintf("Byte %zu is %02X\n", bytes[i]); // assuming CHAR_BIT == 8 
} 

Обратите внимание, что это вообще не способ узнать, какой из байт являются частью представления объекта и то, что их фактический смысл. Например, long double может на некоторых платформах иметь размер 12 или 16, но имеет только 10 соответствующих байтов, и вы не знаете, какой из них является. Хотя для double с размером 8 разумно предположить, что нет прокладки и что байты составляют представление IEEE-754 в линейном порядке. Руководство вашей платформы может вам рассказать.

+0

Чтобы узнать, сколько байтов вам нужно, вы можете вызвать 'sizeof (x)' где x является переменной типа double. –

+0

Проблема с этим заключается в следующем: допустим, мы получили 128 бит в два раза. Я хочу хранить только 64 бита, поэтому мне нужно как-то усечь двойку, чтобы использовать только 64 бита. Если double использует IEEE 754, то использование первого или последнего 64 бит не очень полезно. Это не похоже на использование первого или последнего бита целого числа, в IEEE 754 у вас есть другая структура, и «расщепление» таких битов приведет к совсем другому числу. – user3313574

+0

@ FlorianPrud'homme: Я сказал это много в сообщении ('sizeof (T) == sizeof x'), но вы не знаете, что байты в представлении объекта для ... –

Смежные вопросы