我正在使用RakNet进行网络连接,我需要传输浮点值。问题是,我只能发送单个字节。 因为float由4个字节组成,所以我认为必须将浮动分解为这四个字节并发送它们。在那之后,我想再次将它们组合成一个浮子。
我该怎么做?
答案 0 :(得分:6)
memcpy
原始float
值到适当大小的unsigned char
s
float f = ...;
unsigned char c[sizeof f];
memcpy(c, &f, sizeof f);
// use `c[i]` to access the bytes
使用unsigned char
reinterpret_cast
的数组
float f = ...;
unsigned char *c = reinterpret_cast<unsigned char *>(&f);
// use `c[i]` to access the bytes
使用联合执行相同的重新解释
union FC {
float f;
unsigned char c[sizeof FC::f];
};
float f = ...;
FC u = { f };
// use `u.c[i]` to access the bytes
请记住一些额外的细节:最后一种方法(使用union
)现在在C中是合法的,但在C ++中仍然是正式的非法 - 您不能阅读“非活跃”的工会成员C ++。观察little-big-bigian平台上的字节顺序。如果您使用第二种方法,也会将收件人float
重新解释为unsigned char
的数组,而不是相反,以避免对齐问题。