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

如何定义一个等于16字节的类型

  •  2
  • mans  · 技术社区  · 8 年前

    我想定义一个等于16字节数组的类型。比如:

    typedef uint8_t[16] mynewType;
    

    但我犯了个错误。我如何定义这种类型?

    我在这条线上遇到了几个错误,例如:

    missing ';' before '['  
    empty attribute block is not allowed    
    missing ']' before 'constant'
    'constant'  
    
    5 回复  |  直到 8 年前
        1
  •  4
  •   Anton Malyshev    8 年前

    typedef就像一个声明,但是有一个额外的 typedef 在前面。

    所以如果

    uint8_t my_array[16]; 
    

    声明一个新数组。

    typedef uint8_t my_array[16]; 
    

    使 my_array 这种数组的类型。

        2
  •  6
  •   Bo Persson Touseef    8 年前

    只是

    typedef uint8_t mynewType [16];
    
        3
  •  2
  •   3CxEZiVlQ    8 年前

    与数组变量类似:

    typedef uint8_t mynewType[16];
    
        4
  •  2
  •   Bathsheba    8 年前
    typedef unsigned char mynewType [16];
    

    是在计算机上分配16字节的可移植方式 任何 站台 CHAR_BIT 没有 必要地 必须是8岁。

        5
  •  1
  •   flamewave000    8 年前

    可以将结构与该大小的数组字段一起使用。但是您仍然需要设置各个字节的值。如果希望以不同的方式访问不同的内存块,也可以使用联合。

    // simple data structure of 16 bytes
    struct pack_16 {
        uint8_t data[16];
    }
    // sizeof(pack_16) == 16
    
    // multi type access of 16 bytes
    union multi_pack_16 {
        uint8_t  uint_8[16];
        uint16_t uint_16[8];
        uint32_t uint_32[4];
        uint64_t uint_64[2];
    }
    // sizeof(multi_pack_16) == 16
    

    此外,根据编译器的不同 uint128_t 可以定义16字节大小的数据类型。