填充int变量中的字节

时间:2014-04-09 05:40:49

标签: c int byte bit

有两个变量,

uint8_t x (8 bit type)
uint16_t y (16 bit type)

,它们共同保存有关int num 的值的信息。说 num 包含四个字节 abcd (其中a是最重要的)。然后需要将x复制到b,并且需要将y编译为cd。这样做的最佳方式/代码是什么?

3 个答案:

答案 0 :(得分:0)

Bytemasks会这样做。类似下面的内容

int8 x = a & 0xff;
int16 y = a & 0xff00;

答案 1 :(得分:0)

你可以使用联合(虽然小心填充/对齐)

typedef union 
{
  uint32_t abcd;
  struct 
  {
    uint8_t a;
    uint8_t b;
    uint16_t cd;
  } parts;
} myvaluetype;

myvaluetype myvalue = {0};
uint8_t x = 42;
uint16_t y = 2311;

myvalue.parts.b = x;
myvalue.parts.cd = y;

printf( "%u\n", myvalue.abcd );

答案 2 :(得分:0)

这对我有用:

#include <stdio.h>
#include <stdint.h>

int main()
{
   uint8_t x = 0xF2;
   uint16_t y = 0x1234;
   int a = 0x87654321;

   // The core operations that put x and y in a.
   a = (a & 0xFF000000) | (x<<16);
   a = (a & 0xFFFF0000) | y;

   printf("x: %X\n", x);
   printf("y: %X\n", y);
   printf("a: %X\n", a);
}

这是输出:

x: F2
y: 1234
a: 87F21234