Toon posts:

[Delphi] Van een binair getal naar integer of string *

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoe kan ik van een edit field waarin ik een binaire waarde typ naar een int/str zodat ik deze naar de printerpoort kan sturen?

dus in he tveld typ ik: 01101100 en dit moet dan op de printerpoort kommen zodat de ledjes aangeaan?

Verwijderd

Probeer dit eens,

function BinToInt( Binstr : string ) : integer;
var
i, n, len : integer;
begin
n := 0;
len := length(Binstr);
for i := 1 to len do
if strtoint(Binstr[len-(i-1)]) = 1 then n := n + (1 shl (i-1));
result := n;
end;

  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Kortom: 0110101010 wordt:

0 x 2^10
1 x 2^9
1 x 2^8
0 x 2^7
1 x 2^6
0 x 2^5
1 x 2^4
0 x 2^3
1 x 2^2
0 x 2^1 +
------------
babla

Siditamentis astuentis pactum.


  • Atmosphere
  • Registratie: April 2000
  • Laatst online: 03-12-2025
Volgens mij doet dit wat je wil :) tenminste .. uit het hoofd en niet getest dus, dont blame me als het niet helemaal klopt ;)

Er even van uitgaande dat je weet hoe je een enter af moet vangen in je edit-box, en hoe direct de printerpoort aan te spreken.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function Bin2Str(str:string):integer;
  var idxcnt:integer;  //index teller 
  var strlen:integer;  //string lengte
begin
  try
    strlen:=length(str);
  except
    raise Exception.create('BIN2STR: invoer dient string te zijn');
  end;
  for idxcnt:=(length(str)-1) downto 0 do
  begin
     try
       result:=result+Power((StrToInt(str[idxcnt])*2),idxcnt);
     except
       raise Exception.create('BIN2STR: ongeldige invoer in reeks');
     end; 
  end;
end;

[ Voor 25% gewijzigd door Atmosphere op 25-11-2002 16:42 . Reden: Kleine typos weggehaald :). Aanpassing in source ]

-x(Al is de wereld is nog zo klein. Atmosphere vind hem wel fijn)x-; Sys; t-net


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 28-08 20:54

Tomatoman

Fulltime prutser

Als alternatieve invoer zou je 8 check boxen achter elkaar kunnen zetten, dat werkt duidelijk en voorkomt foute invoer. Een checkbox aangevinkt staat voor de waarde 1 in het desbetreffende bit.

Ik raad je trouwens aan om Byte te gebruiken in plaats van Integer. Ten eerste werkt Integer ook met negatieve waarden, wat tot onverwachte resultaten kan leiden als je niet goed oplet. Ten tweede is de lengte van Integer platformafhankelijk (bij 32-bits Windows-systemen altijd 32 bits).
Delphi:
1
2
3
4
5
6
7
8
function CheckBoxesToByte: Byte;
begin
  Result := 0;
  if CheckBox7.Checked then Result := Result or 1 shl 7;
  if CheckBox6.Checked then Result := Result or 1 shl 6;
  ...
  if CheckBox0.Checked then Result := Result or 1 shl 0;
end;

Een goede grap mag vrienden kosten.


  • Atmosphere
  • Registratie: April 2000
  • Laatst online: 03-12-2025
In samenwerking met mijn collega, ffies wat 'schoonheids'foutjes weggepoetst :) lol
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function Bin2Str(str:string):integer;
  var idxcnt:integer;  //index teller
  var strlen:integer;  //string lengte
begin
  strlen:=length(str);
  for idxcnt:=1 to strlen do
  begin
     try
       result:=result+Power((StrToInt(str[idxcnt])*2),strlen-idxcnt);
     except
       raise Exception.create('BIN2STR: ongeldige invoer in reeks');
     end;
  end;
end;

-x(Al is de wereld is nog zo klein. Atmosphere vind hem wel fijn)x-; Sys; t-net


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 28-08 22:22

Creepy

Tactical Espionage Splatterer

StrToinT('$FF') komt 255 uit. (dus een hex string naar een int).
Dus ik neem aan dat er zoiets ook wel kan met binair, maar ik ben ff vergeten wat de representatie is van een binaire reeks in pascal. Ik gok op 0b, en als dat zo is dan is met behulp van een StrToInt('0b0010101') alles in 1 keer omgezet ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 04:19
Googlen naar "Delphi BinToInt" levert ook veel zinnige resultaten op. Daaruit maak ik trouwens op dat StrToInt niet zomaar te misbruiken is, zoals Creepy voorstelde, anders lijken die eigen implementaties me nogal overbodig.

Ik weet dit echter niet zeker; ik programmeer niet in Delphi.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 28-08 22:22

Creepy

Tactical Espionage Splatterer

Soultaker schreef op 25 November 2002 @ 18:16:
Googlen naar "Delphi BinToInt" levert ook veel zinnige resultaten op. Daaruit maak ik trouwens op dat StrToInt niet zomaar te misbruiken is, zoals Creepy voorstelde, anders lijken die eigen implementaties me nogal overbodig.

Ik weet dit echter niet zeker; ik programmeer niet in Delphi.
Met een hexadecimale waarde in een string (dus inclusief de $) werkt het in elk geval.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Je topictitel zei precies andersom wat je in je topicstart zei :D

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 28-08 22:22

Creepy

Tactical Espionage Splatterer

drm schreef op 25 November 2002 @ 20:23:
Je topictitel zei precies andersom wat je in je topicstart zei :D
Z'n functie heet ook nog Bin2str i.p.v. binstr2int ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 28-08 22:22

Creepy

Tactical Espionage Splatterer

Ik heb het nog ff nagezocht, maar m.b.v. strtoint kan je alleen decimale en hexadecimale representatie's omzetten naar een int. Binair niet.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Chimera
  • Registratie: December 2001
  • Laatst online: 17-07 11:24
En andersom :P


Delphi:
1
2
3
4
5
6
7
8
9
10
function inttobinary(value: integer):string;
begin
 result:='';
 while value>0 do begin
   result:=chr(ord('0')+(value and 1))+result;
   value:=value shr 1;
   end;
 if result='' then
   result:='0';
end;


Waarom geen syntax highlighter in de code tag, zou wel cool zijn 8)

[ Voor 18% gewijzigd door Chimera op 26-11-2002 21:17 ]

[16:19] <WhizzCat> de zon heeft nog maar 5 miljard jaar te leven naar het schijnt
[16:19] <WhizzCat> dus schiet op met dat protocol Chimera :p

Pagina: 1