Re: encoding a float
hurcan solter wrote:
Hi all, I am trying to convert a float value to a octet stream for
transmission, I came up with solution like
float deneme=3.14156789;
float deneme2=0.0;
vector<unsigned char> vec; //this is my buffer can con contain
other things besides this float
int* val=reinterpret_cast<int*>(&deneme); // gives me jeebies
Right. There is no reason for reinterpret_cast here, and in particular not
to an int*. The standard guarantees that you can access the memory of an
object via a char pointer, so using a char pointer would work. Then, you
copy sizeof(float) elements, don't assume that a float has size 4!
it works, but i am not sure that this is the Right Way to do, I
wonder if there is a safer or cleaner way? I tried memcpy to treat
the vector as if an array it didn't work out well( although, It
should work right?)
It does work:
// serialize
vec.resize(sizeof deneme);
memcpy( &vec.front(), &deneme, sizeof deneme);
// deserialize
assert(vec.size() >= sizeof deneme);
memcpy( &deneme2, &vec.front(), sizeof deneme);
HOWEVER: you still have a big problem there and that is that the layout of
floating-point values in memory is not portable between different
architectures. Therefore, I'd suggest you use a text-based format which
makes it much easier to transfer the data between different machines.
Uli
--
Sator Laser GmbH
Gesch?ftsf?hrer: Ronald Boers, Amtsgericht Hamburg HR B62 932
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]