2014-04-09 117 views
0

字节有两个变量,填充在一个int变量

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

,即保持在一起大约一个int NUM的值的信息。说num由四个字节组成abcd(其中a是最重要的)。然后x需要被复制到b,并且y需要被编译为cd。什么是最好的方式/代码来做到这一点?

回答

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 
+0

我建议使用'uint32_t'而不是'int'来代替'a'。 – user694733

0

Bytemasks会做。类似下面

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

你能详细解释一下吗? x和y在哪里? – fool

+0

我认为OP想要反向操作。 –

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);