我有一个预定义的结构(实际上是几个),其中变量跨越32位字边界.在Linux(以及使用GCC的Windows)中,我能够使用'attribute((packed))'将我的结构打包到正确的大小.但是我无法使用VC++和#pragma pack以相同的方式工作.
使用GCC,返回正确的6字节大小:
struct
{
unsigned int a : 3;
unsigned int b : 1;
unsigned int c : 15;
unsigned int troubleMaker : 16;
unsigned short padding : 13;
} __attribute__((packed)) s;
Run Code Online (Sandbox Code Playgroud)
使用VC++,这将返回不正确的8字节大小
#pragma pack(push)
#pragma pack(1)
struct
{
unsigned int a : 3;
unsigned int b : 1;
unsigned int c : 15;
unsigned int troubleMaker : 16;
unsigned short padding : 13;
} s;
#pragma pack(pop)
Run Code Online (Sandbox Code Playgroud)
我可以通过手动将"troubleMaker"分割成边界来实现工作,但我不愿意.有任何想法吗?
我有一个使用Qt构建的应用程序.它将在具有两个(或更多)网卡的计算机上运行.我需要能够为我的应用程序选择TCP连接的以太网接口.在任何人提出建议之前,我无法保证路由表的设置是否正确.我知道如何使用Windows套接字类来执行此操作,但无法为Qt找到任何有关它的内容.任何帮助将不胜感激!