字節有兩個變量,填充在一個int變量
uint8_t x (8 bit type)
uint16_t y (16 bit type)
,即保持在一起大約一個int NUM的值的信息。說num由四個字節組成abcd(其中a是最重要的)。然後x需要被複制到b,並且y需要被編譯爲cd。什麼是最好的方式/代碼來做到這一點?
字節有兩個變量,填充在一個int變量
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);
}
下面是輸出:
x: F2 y: 1234 a: 87F21234
Bytemasks會做。類似下面
int8 x = a & 0xff;
int16 y = a & 0xff00;
你能詳細解釋一下嗎? x和y在哪裏? – fool
我認爲OP想要反向操作。 –
你可以使用一個工會(但要小心填充/對齊)
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);
我建議使用'uint32_t'而不是'int'來代替'a'。 – user694733