2014-04-09 80 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);