【问题标题】:Filling up the bytes in an int variable填充 int 变量中的字节
【发布时间】: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。执行此操作的最佳方法/代码是什么?

【问题讨论】:

    标签: c int byte bit


    【解决方案1】:

    这对我有用:

    #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
    【解决方案2】:

    您可以使用联合(尽管要小心填充/对齐)

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

    【讨论】:

      【解决方案3】:

      字节掩码可以。像下面的东西

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

      【讨论】:

      • 你能详细解释一下吗? x 和 y 在哪里?
      • 我认为 OP 想要反向操作。
      猜你喜欢
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 2019-07-18
      • 2012-02-17
      • 1970-01-01
      • 2022-01-10
      • 2020-10-23
      • 1970-01-01
      相关资源
      最近更新 更多