Пожалуйста, извините меня за то, что я действительно плох в Python, но я попытался дать желаемый результат, и он отлично работает для меня.
Код Python:
import struct
value = 13.37
ba = bytearray(struct.pack("f", value))
for b in ba:
print("%02x" % b)
Представляю, если бы вы просто согласились с этим (в основном записав шестнадцатеричное представление в файл в указанном порядке), он бы прекрасно работал.
В любом случае он выдаст
85
eb
55
41
, который я поместил в массив беззнаковых символов и использовал memcpy так же, как ваш код C ++:
unsigned char data[] = {0x85, 0xeb, 0x55, 0x41};
float f;
memcpy(&f, data, sizeof(float));
std::cout << f << std::endl;
std::cin.get();
, который будетвыведите 13.37
, как и следовало ожидать.Если вы не можете воспроизвести правильный результат таким образом, я подозреваю, что ошибка происходит где-то еще, и в этом случае было бы полезно увидеть как формат написан на python и как он читается на C ++.
Также имейте в виду, что существует несколько способов представления массива байтов, например:
\x85eb5541
, 0x85, 0xeb, 0x55, 0x41
, 85eb5541
и так далее.Мне кажется очень вероятным, что вы просто не выводите правильный формат, и, таким образом, происходит сбой «парсера».