C++中结构体的位域,pascal中如何实现?(100分)

  • 主题发起人 主题发起人 crazycock
  • 开始时间 开始时间
C

crazycock

Unregistered / Unconfirmed
GUEST, unregistred user!
原C++定义为如下的位域形式,pascal中如何实现?
struct{
BYTE param1:1;
BYTE param2:1;
BYTE param3:1;
BYTE param4:1;
BYTE param5:4;
}bParamDemo;

考虑到尽量保持原味,不知道有什么方法可以尽量实现这个方法的定义,查了一下资料,好像都是变相实现的。

有介绍说是这样写,好像不行。
type
TParamDemo = packed record
param1:0..1;
param2:0..1;
param3:0..1;
param4:0..1;
param5:array [0..3] of 0..1;
end;
 
pascal中应该没有直接对应的定义,只能用其他方法来间接实现,如用一个字节(byte)表示bParamDemo,然后另外写一些函数来读byte中的位;
TParamDemo的定义是不行的,因为pascal中定义时最小单位为字节(byte,char),所以TParamDemo的大小实际是8个字节而不是C++定义中的一个字节。
 
来迟了,楼上的说得很对~~~

要得到相应的位, 只能用位移了~~~
 
还有更好的方法么?因为有个文件是C++缓冲区直接写入的文件,要读取到一个结构体中去,如果定义的结构和C++相同会简单很多。
 
有些代码转换有点麻烦,在用C++处理吧,完成后转成通用的类型,转给Delphi吧.
 
没什么好的方法,
只能是你先按字节读出这个结构,然后处理一下给你这个新的结构
 
谢谢大家的提示,不过还是不理想,有没有用过TBits的,这个东西有什么特点么?
 
我看了下,TBits不适用于你的这种情况,其实你可以将它以Byte形式读出来,然后
var
aParam: Byte;
...
begin
param1 := aParam and $80;
param2 := aParam and $40;
param3 := aParam and $20;
param4 := aParam and $10;
param5 := aParma and $0F;
 
后退
顶部