什么是枚举描述符类型描述符类型:8;用C代码是什么意思?
这是代码的一部分。我不明白你在说什么什么是枚举描述符类型描述符类型:8;用C代码是什么意思?,c,struct,enumeration,bit-fields,C,Struct,Enumeration,Bit Fields,这是代码的一部分。我不明白你在说什么 enum DescriptorType DescriptorType :8; 什么意思 还有,什么是属性;你是说这里 enum DeviceClass { DeviceClassInInterface = 0x00, DeviceClassCommunications = 0x2, DeviceClassHub = 0x9, DeviceClassDiagnostic = 0xdc, DeviceClassMiscellaneous = 0xef
enum DescriptorType DescriptorType :8;
什么意思
还有,什么是属性;你是说这里
enum DeviceClass {
DeviceClassInInterface = 0x00,
DeviceClassCommunications = 0x2,
DeviceClassHub = 0x9,
DeviceClassDiagnostic = 0xdc,
DeviceClassMiscellaneous = 0xef,
DeviceClassVendorSpecific = 0xff,
};
struct UsbDeviceDescriptor {
u8 DescriptorLength; // +0x0
enum DescriptorType DescriptorType : 8; // +0x1
u16 UsbVersion; // (in BCD 0x210 = USB2.10) +0x2
enum DeviceClass Class : 8; // +0x4
u8 SubClass; // +0x5
u8 Protocol; // +0x6
u8 MaxPacketSize0; // +0x7
u16 VendorId; // +0x8
u16 ProductId; // +0xa
u16 Version; // +0xc
u8 Manufacturer; // +0xe
u8 Product; // +0xf
u8 SerialNumber; // +0x10
u8 ConfigurationCount; // +0x11
} __attribute__ ((__packed__));
这是一个8位的位字段。这表示结构中包含枚举的8位
C中的枚举变量具有C99标准中的实现定义的大小Ref 6.2.2.2。如果不将其作为位字段包含,则可以使用8个以上的位来存储此值
} __attribute__ ((__packed__));
这表明编译器不应在结构元素之间添加任何填充字节。通常,在不同的结构元素之间添加填充字节,以允许32位或16位类型的更容易对齐的访问
您可以使用和不使用_属性__ __包装__)对struct UsbDeviceDescriptor进行sizeof,并可以看到差异
这是一个特定于GCC的扩展。它也被其他一些编译器复制,但决不是可移植代码。此外,属性打包了什么;你是说这里?为什么它使用attrubute\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?结构UsbInterfaceDescriptor{InterfaceClassVendorSpecific=0xff,}类:8;//+x05 u8亚类;u8协议;u8 StringIndex;}属性压缩;请使用问题下方的编辑链接进行编辑。记住,每个问题一个问题。至于你的问题,我建议你退一步,买几本初学者的书,开始阅读关于结构和位域的书。_属性______;打包___;用于防止编译器在结构中插入无意义的位来指示对齐。这是非标准的胡言乱语。很可能它不会实现程序员的意图。该属性表示gcc,但gcc不会跨不同类型填充位。最好的办法是重写整个代码。在运行时也切换到stdint.h。枚举位字段也是特定于编译器的。该标准只要求int、unsigned int和_Bool在位域中工作。谢谢Raje!那么,这是否意味着设备上的每个项目都是8位?DeviceClassCommunications=0x2,是否将其另存为DeviceClassCommunications=0x02?DeviceClass{DeviceClassInInterface=0x00,DeviceClassCommunications=0x2,DeviceClassHub=0x9,DeviceClassDiagnostic=0xdc,DeviceClassMiscellaneous=0xef,DeviceClassVendorSpecific=0xff,};C中的枚举与整数类型相同。枚举变量的大小由实现定义。不要与始终为int的枚举常量混淆。@brianley-还有一些16位值。e、 g.ProductId供应商ID
} __attribute__ ((__packed__));