小编NJC*_*him的帖子

C++ struct alignment问题

我有一个预定义的结构(实际上是几个),其中变量跨越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"分割成边界来实现工作,但我不愿意.有任何想法吗?

c++ memory gcc visual-c++

8
推荐指数
3
解决办法
3万
查看次数

在双宿主机上绑定QTcpSocket

我有一个使用Qt构建的应用程序.它将在具有两个(或更多)网卡的计算机上运行.我需要能够为我的应用程序选择TCP连接的以太网接口.在任何人提出建议之前,我无法保证路由表的设置是否正确.我知道如何使用Windows套接字类来执行此操作,但无法为Qt找到任何有关它的内容.任何帮助将不胜感激!

sockets qt

2
推荐指数
1
解决办法
1362
查看次数

标签 统计

c++ ×1

gcc ×1

memory ×1

qt ×1

sockets ×1

visual-c++ ×1