Is there a way to receive receive data as unsugned char over UDP on QT
Posted
by user269037
on Stack Overflow
See other posts from Stack Overflow
or by user269037
Published on 2010-03-08T07:47:10Z
Indexed on
2010/03/08
7:51 UTC
Read the original article
Hit count: 584
I need to send floating point numbers using UDP connection to a QT application. Now in QT the only function available is
qint64 readDatagram ( char * data, qint64 maxSize, QHostAddress * address = 0, quint16 * port = 0 )
which accepts data in the form of signed character buffer. I can convert my float into a string and send it but it will obviously not be very efficient converting a 4 byte float into a much longer sized character buffer.
I got hold of these 2 functions to convert a 4 byte float into an unsinged 32 bit integer to transfer over network which works fine for a simple c++ udp program but for QT I need to receive the data as unsigned char.
Is it possible to avoid converting the floatinf point data into a string and then sending it ??
uint32_t htonf(float f) { uint32_t p; uint32_t sign;
if (f < 0) { sign = 1; f = -f; }
else { sign = 0; }
p = ((((uint32_t)f)&0x7fff)<<16) | (sign<<31); // whole part and sign
p |= (uint32_t)(((f - (int)f) * 65536.0f))&0xffff; // fraction
return p;
}
float ntohf(uint32_t p) { float f = ((p>>16)&0x7fff); // whole part f += (p&0xffff) / 65536.0f; // fraction
if (((p>>31)&0x1) == 0x1) { f = -f; } // sign bit set
return f;
}
© Stack Overflow or respective owner