Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 270
  • Last Modified:

Binary notation

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

var i: byte;

i := ....

0
pede
Asked:
pede
  • 2
  • 2
  • 2
  • +2
1 Solution
 
mpootsCommented:
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
 
mpootsCommented:
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
 
edeyCommented:
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);


and your caption will read '1'

GL
Mike
0
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 
bugrogerCommented:
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
 
bullenCommented:
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
 
pedeAuthor Commented:
>the environment doesn't support refrencing constants in binary directly
Though I HATE the answer, this was what I was looking for.
0
 
edeyCommented:
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
 
pedeAuthor 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.

Thanks for the comments.
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

  • 2
  • 2
  • 2
  • +2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now