LINUX.ORG.RU

Машинная форма float


0

1

Мне нужно получить значение некоторой переменной float в виде байт-формы (например: FF B0 03 43). Как мне это сделать? Все равно как, хоть web сервис, хоть программа. Интересует только одно - я ей значение, она мне байты. Желательно, чтобы значение можно было подавать в любой форме: 1; 2.45; 1.33E-1.

union m{
   float f;
   char bytes[4];
}

присвоил m.f значение, байтики прочитал из m.bytes;

nanoolinux ★★★★
()
Ответ на: комментарий от ckotinko

uint32_t cvt(float x){return reinterpret_cast<uint32_t>(x);}

uint64_t cvt(double x){return reinterpret_cast<uint64_t>(x);}

Тогда уж

uint32_t cvt(float x){return *reinterpret_cast<uint32_t*>(&x);}
uint64_t cvt(double x){return *reinterpret_cast<uint64_t*>(&x);}
Хотя вариант с union лучше.

m0rph ★★★★★
()
Ответ на: комментарий от m0rph

тогда уж прямо типы указателей можно привести

ckotinko ☆☆☆
()

> Все равно как, хоть web сервис, хоть программа.

> Желательно, чтобы значение можно было подавать в любой форме: 1; 2.45; 1.33E-1.

$ perl -e 'printf "%02x %02x %02x %02x\n", unpack C4 => pack f => 1'
00 00 80 3f
$ perl -e 'printf "%02x %02x %02x %02x\n", unpack C4 => pack f => 2.45'
cd cc 1c 40
$ perl -e 'printf "%02x %02x %02x %02x\n", unpack C4 => pack f => 1.33E-1'
27 31 08 3e
$ _
arsi ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.