Еще одна проблема с положением double
в char byte_string [sizeof(double)]
- это выравнивание . Эта довольно хитрая стратегия называется type punning . Вам также нужно выделить sizeof(double)*2
байтов в этой функции, а затем создать выровненный указатель в середине буфера.
Как правило, подобного рода "разбрасывание" является плохой идеей, но вы почти правы. Вы просто хотите привести double
к массиву char
, а не наоборот. Кроме того, scanf
может сделать больше за вас и исключить петлю.
double hex_to_double2(string &hexString)
{
double value;
sscanf( hexString.c_str(), "%2hhx%2hhx%2hhx%2hhx%2hhx%2hhx%2hhx%2hhx",
(char*) & value, // note, this is a reinterpret_cast
(char*) & value + 1,
(char*) & value + 2,
(char*) & value + 3,
(char*) & value + 4,
(char*) & value + 5,
(char*) & value + 6,
(char*) & value + 7 );
return p;
}
Вам разрешено использовать указатель типа такого типа только от типов POD (простые старые данные или C-совместимые) до char
.
Я оставлю наоборот как упражнение :).