gpt4 book ai didi

delphi - 将C结构转换为delphi

转载 作者:行者123 更新时间:2023-12-03 15:41:53 26 4
gpt4 key购买 nike

我需要将下面的结构转换为delphi。我对这个“:4”值在“保留”和“版本”成员中意味着什么感到怀疑。看起来它干扰了结构的尺寸!有人有什么建议吗?

typedef struct _FSRTL_COMMON_FCB_HEADER {
CSHORT NodeTypeCode;
CSHORT NodeByteSize;
UCHAR Flags;
UCHAR IsFastIoPossible;
UCHAR Flags2;
UCHAR Reserved :4;
UCHAR Version :4;
PERESOURCE Resource;
...

最佳答案

正如评论已经说过的,这是一个位域,即一组共同形成字节、字或双字的位。

最简单的解决方案是:

type
_FSRTL_COMMON_FCB_HEADER = record
private
function GetVersion: Byte;
procedure SetVersion(Value: Byte);
public
NodeTypeCode: Word;
...
ReservedVersion: Byte; // low 4 bits: reserved
// top 4 bits: version
// all other fields here

property Version: Byte read GetVersion write SetVersion;
// Reserved doesn't need an extra property. It is not used.
end;

...

implementation

function _FSRTL_COMMON_FCB_HEADER.GetVersion: Byte;
begin
Result := (ReservedVersion and $F0) shr 4;
end;

procedure _FSRTL_COMMON_FCB_HEADER.SetVersion(Value: Byte);
begin
ReservedVersion := (Value and $0F) shl 4;
end;

一个不太简单(但更通用)的解决方案和解释可以在我的文章中找到:http://rvelthuis.de/articles/articles-convert.html#bitfields ,Uli 已链接到该链接。

关于delphi - 将C结构转换为delphi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41074852/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com