【发布时间】:2019-08-26 06:11:53
【问题描述】:
这是代码的一部分。看不懂是什么意思
enum DescriptorType DescriptorType :8;
是什么意思?
还有__attribute__ ((__packed__));在这里是什么意思?
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__));
【问题讨论】:
-
另外,属性 ((packed)) 是什么?在这里的意思?为什么它使用 attrubute__((__packed))?结构 UsbInterfaceDescriptor { InterfaceClassVendorSpecific = 0xff,} 类:8; // +x05 u8 子类; u8 协议; u8 字符串索引; } 属性 ((packed));
-
请使用您的问题下方的
edit链接进行编辑。请记住,每个问题一个问题。 -
至于你的问题,我建议你退后一步,买几本初学者的书,开始阅读结构和位域。
-
__attribute__((__packed__))用于防止编译器在你的结构中插入无意义的位来指示对齐。 -
这是非标准的胡言乱语。它很可能不会按照程序员的意图去做。该属性建议使用 gcc,但 gcc 不会跨不同类型填充位。最好的办法是重写整个代码。在您使用时也切换到
stdint.h。
标签: c struct enumeration bit-fields