【发布时间】:2014-04-09 05:40:48
【问题描述】:
有两个变量,
uint8_t x (8 bit type)
uint16_t y (16 bit type)
,它们一起保存有关 int num 值的信息。假设 num 由四个字节 abcd 组成(其中 a 是最重要的)。然后x需要复制到b,y需要编译到cd。执行此操作的最佳方法/代码是什么?
【问题讨论】:
有两个变量,
uint8_t x (8 bit type)
uint16_t y (16 bit type)
,它们一起保存有关 int num 值的信息。假设 num 由四个字节 abcd 组成(其中 a 是最重要的)。然后x需要复制到b,y需要编译到cd。执行此操作的最佳方法/代码是什么?
【问题讨论】:
这对我有用:
#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);
}
这是输出:
×:F2 是:1234 一个:87F21234【讨论】:
uint32_t 而不是int 作为a。
您可以使用联合(尽管要小心填充/对齐)
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 );
【讨论】:
字节掩码可以。像下面的东西
int8 x = a & 0xff;
int16 y = a & 0xff00;
【讨论】: