# Binary notation

How do I express value as binary? I thought it was %00000001 (for 1) but it's not!

var i: byte;

i := ....

LVL 1
###### Who is Participating?

Commented:
the environment doesn't support refrencing constants in binary directly, though you cant do something like this:

var
tmp : integer;
begin
asm
mov tmp,00000001b
end;
caption := intToStr(tmp);

GL
Mike
0

Commented:
This function :

function ByteToBin(aByte: Byte): string;
var liCount : integer;
begin
Result := '';
for liCount := 0 to 7 do
begin
if aByte and 1 <> 0 then
Result := '1' + Result
else
Result := '0' + Result;
aByte := aByte shr 1;
end;
end;

Will result '0000001' if you call

showMessage(ByteToBin(1));

Is that what you looked for?

Marcel
0

Commented:
Or the other way around:

function BinToByte(aString: string): byte;
var liCount : integer; i : double;
begin
Result      := 0;
for liCount := 1 to Length(aString) do
begin
Result := Result shl 1;
if aString[liCount] <> '0' then
Inc(Result);
end;
end;

Marcel (Holland)
0

Commented:
Hi,
one more functions...

Function ByteToBit(b : byte) : String;
Var
z : byte;
Begin
Result := '';
For z := 1 to 8 do
Begin
IF b AND 128 = 128 then Result := Result + '1'
else Result := Result + '0';
b := b SHL 1;
End;
End;

Function WordToBit(w : word) : string;
Var
z : byte;
Begin
Result := '';
For z := 1 to 16 do
Begin
IF w AND 32768 = 32768 then Result := Result + '1'
else Result := Result + '0';
w := w SHL 1;
End;
End;

Function DWordToBit(d : dword) : string;
Var
z : byte;
Begin
Result := '';
For z := 1 to 32 do
Begin
IF d AND \$80000000 = \$80000000 then Result := Result + '1'
else Result := Result + '0';
d := d SHL 1;
End;
End;

Function BitsToInt(s : string) : Integer;
Var
z : byte;
Begin
Result := 0;
For z := 1 to Length(s) do
Begin
IF s[z] = '1' then Result := Result +1;
IF z <> Length(s) then Result  :=  Result  SHL 1;
End;
End;
0

Commented:
Not prety but it works

...
function bStr2Int(bs : String):Int64;
begin
result := 0;
while length(bs) > 0 do begin
result := 2*result;
if bs[1]='1' then result := result + 1;
bs := copy(bs,2,length(bs));
end;
end;
...
i := bStr2Int('0000001101');  // 13
...

bullen
0

Author Commented:
>the environment doesn't support refrencing constants in binary directly
Though I HATE the answer, this was what I was looking for.
0

Commented:
Glad to be of service, though i too wish there were a better solution.  You could go with some sort of string manipulation, as mentioned above, but you take a huge performance hit if you have to do it often :(

GL
Mike
0

Author Commented:
I got over it ;o) I could have made the string conversions at startup, but string manipulation was simply too ugly for me, so I just made it in a completely different way.