Конвертировать число с плавающей точкой в ​​байт [] для отправки через именованный канал (C ++) - PullRequest
2 голосов
/ 30 марта 2012

У меня есть процесс C ++, в котором есть поток, который должен отправлять плавающие данные, хранящиеся в массиве, другому процессу через именованные каналы.Я сконструировал байтовый массив, готовый к отправке, но я не очень уверен, как получить числа с плавающей точкой в ​​форме, которую можно отправить (т.е. как преобразовать их в байты).

Другой процесс - это C #процесс на той же машине, и я предполагаю, что я могу использовать BitConverter, чтобы получить соответствующие байты во входящем байтовом массиве и преобразовать его в число с плавающей точкой, но я не слишком знаком с C ++ и не знаю, как изменить число с плавающей точкой на байт].

Платформа Windows, я использую Visual Studio 2010 C ++.

Ответы [ 2 ]

2 голосов
/ 30 марта 2012

быстрый и грязный способ - использовать объединение:

union getBytes
{
    float floatNumber;
    byte bytes[sizeof(float)];
} number;

БОЛЬШАЯ оговорка - следить за порядком байтов на двух конечных машинах. Обнаружение порядка байтов было решено много раз, поэтому попробуйте поискать некоторые ресурсы по этому вопросу Просто убедитесь, что ваши байты совпадают с обеих сторон.

РЕДАКТИРОВАТЬ: изменены байты в объединении, чтобы соответствовать размеру поплавка на машине.

2 голосов
/ 30 марта 2012

Достаточно просто:

const void *data = &myFloat;
size_t size = sizeof myFloat;

Затем используйте memcpy для перемещения данных в нужное место.

...