为什么使用“StructLayout(LayoutKind.Sequential)”布局时,具有两个布尔值的结构体是 8 个字节? [重复]

问题描述 投票:0回答:1

这是我的结构

    [StructLayout(LayoutKind.Sequential)]
    public struct SystemServiceStatus {
        public bool isSystemUiOverlaid;
        public bool isInBackgroundExecution;
    }

将两个布尔值设置为 true 时,我得到以下二进制(十六进制):

01 00 00 00 01 00 00 00

我不知道这是否是因为填充......或者我的布尔值是否被序列化为 32 位整数并以小尾数法布局。

ChatGPT 似乎非常有信心这两个布尔值应该在前两个字节中并排,但这显然是不对的。

c# struct binary interop
1个回答
0
投票

我找到了答案。 C# 结构布局包=??用于布尔值

TLDR;处理布尔值的默认方法是作为整数,但可以通过在每个布尔值上放置 [MarshalAs(UnmanagedType.I1)] 来控制它,以强制其为一个字节。

© www.soinside.com 2019 - 2024. All rights reserved.