Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何定义等于16字节的类型_C++_C++11_Typedef - Fatal编程技术网

C++ 如何定义等于16字节的类型

C++ 如何定义等于16字节的类型,c++,c++11,typedef,C++,C++11,Typedef,我想定义一个等于16字节数组的类型。像这样的事情: typedef uint8_t[16] mynewType; 但是我犯了一个错误。我如何定义这样的类型 我在这行中遇到了几个错误,例如: missing ';' before '[' empty attribute block is not allowed missing ']' before 'constant' 'constant' 只是 与数组变量类似: typedef uint8_t mynewType[16];

我想定义一个等于16字节数组的类型。像这样的事情:

typedef uint8_t[16] mynewType;
但是我犯了一个错误。我如何定义这样的类型

我在这行中遇到了几个错误,例如:

missing ';' before '['  
empty attribute block is not allowed    
missing ']' before 'constant'
'constant'  
只是


与数组变量类似:

typedef uint8_t mynewType[16];

typedef类似于声明,但前面有一个额外的
typedef

所以如果

声明一个新数组

typedef uint8_t my_array[16]; 
使
my_数组
成为此类数组的类型

typedef unsigned char mynewType [16];

是在任何平台上分配16字节的可移植方式<代码>字符位不一定必须是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

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

可以使用mynewType=struct{char data[16];}。这将避免数组退化为指针。@Eljay但不能保证类型正好是16字节宽。可能有填充,或者如果
CHAR\u BIT
大于8,则它也会更大。@NathanOliver“sizeof运算符产生由其操作数类型的非潜在重叠对象占用的字节数”和“sizeof(CHAR)、sizeof(有符号字符)和sizeof(无符号字符)为1”,不管是什么字符,路人谢谢。至少现在我知道
CHAR\u BIT
bits是一个字节。@NathanOliver•我工作过的一个古怪的平台,一个字节(或CHAR)是13位。一个字(或int)是26位。是字节8
CHAR\u位
还是只有8位?在这些类型的系统中,你仍然会把16位字符称为一个字节吗?我确实会这样做。八位字节这个术语用来精确地描述8位。酷。谢谢+1你觉得这篇博文怎么样@FredLarson:这是POSIX标准,它不是在编写与C++标准相同的时候。POSIX还声明,以
\t
结尾的用户定义变量将整个程序置于未定义状态!
typedef unsigned char mynewType [16];
// 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