将浮点数除以单个字节

时间:2013-12-24 17:18:19

标签: c++ networking

我正在使用RakNet进行网络连接,我需要传输浮点值。问题是,我只能发送单个字节。 因为float由4个字节组成,所以我认为必须将浮动分解为这四个字节并发送它们。在那之后,我想再次将它们组合成一个浮子。

我该怎么做?

1 个答案:

答案 0 :(得分:6)

  1. memcpy原始float值到适当大小的unsigned char s

    数组
    float f = ...;
    
    unsigned char c[sizeof f];
    memcpy(c, &f, sizeof f);
    // use `c[i]` to access the bytes
    
  2. 使用unsigned char

    将原始指针重新解释为reinterpret_cast的数组
    float f = ...;
    
    unsigned char *c = reinterpret_cast<unsigned char *>(&f);
    // use `c[i]` to access the bytes
    
  3. 使用联合执行相同的重新解释

    union FC {
      float f;
      unsigned char c[sizeof FC::f];
    };
    
    float f = ...;
    
    FC u = { f };
    // use `u.c[i]` to access the bytes
    
  4. 请记住一些额外的细节:最后一种方法(使用union)现在在C中是合法的,但在C ++中仍然是正式的非法 - 您不能阅读“非活跃”的工会成员C ++。观察little-big-bigian平台上的字节顺序。如果您使用第二种方法,也会将收件人float重新解释为unsigned char的数组,而不是相反,以避免对齐问题。