在字节缓冲区内复制struct

Jep*_*sen 0 c++ buffer byte bytebuffer memcpy

我有以下结构:

struct sample {
  uint8_t four;
  bool    b;
  uint8_t two;
};
Run Code Online (Sandbox Code Playgroud)

为了发送udp数据包,我需要将这些值打包成一个字节:

| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
+---+---+---+---+---+---+---+---+
|     four      | 0 | b |  two  |
+---------------+---+---+-------+
Run Code Online (Sandbox Code Playgroud)

在这个字节中复制struct值的最佳方法是什么?我在检查之前检查了前提条件,因此在将uint8_t值复制到更小的空间时不会丢失任何数据.

Sla*_*ica 5

我只想使用一个函数:

uint8_t pack( const sample &s )
{
    return ( s.four & 0xF ) | ( s.b << 5 ) | ( ( s.two & 3 ) << 6 );
}
Run Code Online (Sandbox Code Playgroud)

正如您所说的那样,检查数据范围可以简化为:

    return s.four | ( s.b << 5 ) | ( s.two << 6 );
Run Code Online (Sandbox Code Playgroud)