# How to write a bit in a record?

I am building a record of Bytes and I have to split one of those Bytes. (4bits-4bits or 1bit-7bits).
Anyone knows how to do so in a record?
###### Who is Participating?

Commented:
guessing not possible
the smallest part of a record is a byte
0

Commented:
Hi comptebidon81,

do you mean something like this?

var
B: Byte;
B1: Byte;
begin
B := \$FF;        // B  := 11111111
B1 := B and \$F0; // B1 := 11110000  get first for bits
B1 := B1 shr 4;  // B1 := 00001111 shif it

end;
0

Commented:
Take a look at TBits...
0

Author Commented:
Actually, I'm looking for a way to store it in a record, so it would be easier to understand the structure of the file. Right now, I'm working with arrays of Bytes, and it is hard to understand the true meaning of the bytes, because they can be divided in up to 8 parts. It is also very confusing when I write down the file. (I have to make a lot of calculation for each byte).
0

Author Commented:
TBits is like a list, isn't it?
How am I suppose to store a list of one item in a record?
0

Commented:
Ohh, I'v got it :-)
Seems the way is to create an object:

type
private
FData: array[0..1] of byte;
function GetFirst4Bits: Byte;
procedure SetFirst4Bits(B: Byte);
public
procedure WriteToFile(F: File);
property First4bits: byte read GetFirst4bits write SetFirst4Bits;
end;

......

begin
Result := (FData[0] and \$F0) shr 4;
end;

begin
FData[0] := (FData[0] and \$0F) or (B shl 4);
end;

------
Igor.
0

Commented:
maybe a set could help like

type TBits=(bit0,bit1,bit2,bit3,bit4,bit5,bit6,bit7);
Type TByte=set of TBits;

0

Commented:
You can use these functions to set/clear/read bit in a byte:

procedure SetBit(var byte: Byte; bit: Byte);
begin
byte := byte or (1 shl bit);
end;

procedure ClearBit(var byte: Byte; bit: Byte);
begin
byte := byte and not (1 shl bit);
end;

function GetBit(byte, bit: Byte): Boolean;
begin
Result := (byte and (1 shl bit)) <> 0;
end;
0

Author Commented:
Sorry about the misunderstanding, but my problem is not about reading or setting the Bits. I need a way to include it in a record. Something that would look like this:
MyRecord = record
1Bit : Bit;
2Bits : array [1..2] of Bit;
end;
ya see?
0

Commented:
hu,

not guessed this, even it was not a help,
are you sure you've pressed the correct button?

thanks for the points :-)

meikl ;-)
0

Author Commented:
Well by telling me it was not possible, you answered my question!