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

Filed under:
|

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

Related posts about qt

Related posts about udp