代码之家  ›  专栏  ›  技术社区  ›  bigdog225

如何将无符号16位和无符号32位整数编码到无符号8位内存阵列?

  •  0
  • bigdog225  · 技术社区  · 8 年前

    我知道如何进行位移位,但我的值似乎跑偏了边缘,我失去了原始值,作为保留8位的回报。

    1 回复  |  直到 8 年前
        1
  •  1
  •   nglee    8 年前

    对于无符号16位整数:

    unsigned short val16 = 0x1234;
    unsigned char enc[2];
    enc[0] = val16 & 0xff;              // stores 0x34 to enc[0]
    enc[1] = val16 >> 8 & 0xff;         // stores 0x12 to enc[1]
    

    对于无符号32位整数:

    unsigned int val32 = 0x12345678;
    unsigned char enc[4];
    enc[0] = val32 & 0xff;              // stores 0x78 to enc[0]
    enc[1] = val32 >> 8 & 0xff;         // stores 0x56 to enc[1]
    enc[2] = val32 >> 16 & 0xff;        // stores 0x34 to enc[2]
    enc[3] = val32 >> 24 & 0xff;        // stores 0x12 to enc[3]
    

    unsigned short val16 = 4660;       // 4660 = 0x1234
    unsigned char enc[2];
    enc[0] = val16 & 255;
    enc[1] = val16 >> 8 & 255;
    

    unsigned int val32 = 305419896;    // 305419896 = 0x12345678
    unsigned char enc[4];
    enc[0] = val32 & 255;
    enc[1] = val32 >> 8 & 255;
    enc[2] = val32 >> 16 & 255;
    enc[3] = val32 >> 24 & 255;