请教高手!C语言结构体中的域位(bit field)能否转换成Pascal语言?(200分)

  • 主题发起人 主题发起人 GOHKI
  • 开始时间 开始时间
G

GOHKI

Unregistered / Unconfirmed
GUEST, unregistred user!
我想把C++Builder里的程序移植到Delphi里,但结构定义里使用了域位,如下:
代码:
typedef struct {
  BYTE Flag1:1;
  BYTE Flag2:1;
  BYTE Reserved:6;
}Flags_T;
应该如何转换?还有,C语言里的struct是否应该转换成packed record
请高手帮忙![:(]
 
没办法
只能使用“AND”
或“OR”
操作各个域。
 
那岂不是要累死了?[:(!]
有没有好一点的办法?
 
type
TMyBit=0..7;
TMyBits=set of TMyBit;
...
var
Mybits:TMyBits;
f:File;
i:Integer;
...
MyBits:=[]
//b00000000
i:=0;
MyBits:=MyBits+
//b00000001
MyBits:=MyBits+[1]
//b00000011
MyBits:=MyBits+[7]
//b10000011
MyBits:=MyBits-[7]
//b00000011
MyBits:=[0..7]
//b11111111
 
不可以,没有直接的转换的办法.
你可以用c做成dll,在delphi 中调用.
 
同意 dhl2001,一般的结构中的位域,你可以用位操作符先做些专门的例程,如 SetBit,
GetBit...然后调用这些例程存取这些域。按你的例子,只是用 Flag1,Flag2 做标记,你
可以用 Set 来实现其功能。
type
TFlag = (Flag1, Flag2);
TFlags = Set of TFlag;
...
var
Flags: TFlags;
aFlag: TFlag;
...
Flags := [];
Flag := Flag1;
Include(Flags, Flag)
//相当把 Flag_T 中的 Flag1 域设为了 1;
Exclude(Flags, Flag)
//相当把 Flag_T 中的 Flag1 域设为了 0;
if (Flag1 in Flags) then
ShowMessage('Flags 中 Flag1 域已设为 1');
...
 
多人接受答案了。
 
后退
顶部