C++ 如何定义等于16字节的类型
我想定义一个等于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];
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位。是字节8CHAR\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