Toon posts:

[Pascal] BinToHex probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een probleem bij het uitvoeren van de BinToHex procedure. Aan de prodecure geef ik een GPIOPins type mee. Dit is een array[0..15] of Boolean; Van deze array worden bits gemaakt die allemaal in 1 string komen te staan.

Als ik nu bijv alleen bit 0 op 1 zet dan krijg ik als Hex waarde: 30303030......

Dat klopt dus totaal niet. Weet iemand wat ik fout doe?

Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
var Pins: String;
    PinValueHex: array[0..31] of Char;
    i: Integer;
begin
  Pins := '';
  for i := 15 downto 0 do
  begin
    if GPIOPins[i] then
      Pins := Pins + '1'
    else
      Pins := Pins + '0';
  end;

  try
    BinToHex(PChar(Pins), @PinValueHex, 2 * Sizeof(Pins));

    PinValueHex[SizeOf(PinValueHex) - 1] := #0;
  except
    on E: Exception do
    begin
      ShowMessage('Error: ' + E.Message);
    end;
  end;

  Result := PinValueHex;

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 21:31
Ik zou zeggen zet eens wat breakpoints en trace waar het verkeerd gaat.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Verwijderd

Topicstarter
farlane schreef op 15 July 2003 @ 10:53:
Ik zou zeggen zet eens wat breakpoints en trace waar het verkeerd gaat.
Nee dat heeft geen zin omdat BinToHex gewoon een verkeerde waarde terug geeft. (Ik heb dat namelijk al getest en weet dus dat het gewoon goed gaat overal ==> geen errors dus)

[ Voor 17% gewijzigd door Verwijderd op 15-07-2003 11:08 ]


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Geen errors? Overal gaat het goed? Dus er is niets fout? Das mooi :) Dan zijn we klaar hier...

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
Ja ik bedoel er zit geen syntax fout in waardoor de compiler over zijn nek gaat.

Ik geef aan de BinToHex de volgende waarde mee:

Pins ==> '0000000000000001'

en ik krijg als resultaat

PinValueHex ==> '3030303030303030'

[ Voor 10% gewijzigd door Verwijderd op 15-07-2003 11:31 ]


Verwijderd

Hint:
30 is hexadecimaal voor de char '0'. Bron

  • Togt
  • Registratie: Februari 2000
  • Laatst online: 24-08-2021
Tja, met mijn brakke programmeerkennis: Begin eens met je variablen te vullen met 0 ?!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 21:31
Verwijderd schreef op 15 July 2003 @ 11:07:
[...]
Nee dat heeft geen zin omdat BinToHex gewoon een verkeerde waarde terug geeft. (Ik heb dat namelijk al getest en weet dus dat het gewoon goed gaat overal ==> geen errors dus)
Dat er geen syntax error in zit heeft de compiler je al verteld, voordat je die breakpoints zet.

Wat ik bedoel is, zet eens een breakpoint voordat die BinToHex wordt aangeroepen, bekijk de inhoud van je bool array.

Step dan door de BinToHex, en bekijk het resultaat van die functie.

Als het resultaat niet klopt met wat je erin stopt, is die BinToHex brak ( Als het een lib functie is van Pascal is die kans behoorlijk klein ;) )

Als het resultaat wel klopt met wat je erin stopt, is dat wat je erin stopt niet goed.

Debuggen is een behoorlijk belangrijke taak bij het programmeren, wen er maar vast aan. :)

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Verwijderd

Topicstarter
farlane schreef op 15 July 2003 @ 11:48:
[...]Wat ik bedoel is, zet eens een breakpoint voordat die BinToHex wordt aangeroepen, bekijk de inhoud van je bool array.

Step dan door de BinToHex, en bekijk het resultaat van die functie.
De boolean array heeft gewoon de juiste waarden. BinToHex is een standaard functie van pascal dus daar kan ik niet "in" stappen.

Ik heb het idee dat het fout gaat met het PChar/String verhaal. En aan de hand van het debuggen (wat ik natuurlijk ook altijd doe) kom ik daar niet verder uit. Dat is dan ook de rede dat ik het hier vraag.

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

RB-Rubidium heeft het antwoord al verklapt :) dus tis niet meer nodig. BinToHex werkt perfect, maar niet voor wat tokkie wil. Het converteerd een binaire waarde naar een hexadecimale weergave niet van een binaire weergave naar een hexadecimale weergave.

/edit
Ow, en je kan wel in de standaard Delphi functies stappen hoor. Bijvoorbeeld door 'Use Debug DCUs' aan te zetten.

[ Voor 58% gewijzigd door LordLarry op 15-07-2003 12:13 ]

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
LordLarry schreef op 15 July 2003 @ 12:03:
RB-Rubidium heeft het antwoord al verklapt :) dus tis niet meer nodig. BinToHex werkt perfect, maar niet voor wat tokkie wil. Het converteerd een binaire waarde naar een hexadecimale weergave niet van een binaire weergave naar een hexadecimale weergave.
Oh dan heb ik het verkeerd begrepen. Nou ja dan zit er niks anders op dan zelf ff zo'n functie maken :)

edit:
LordLarry: Bedankt ik wist niet dat je ook door die standaard functies kon lopen. Weer wat geleerd!

[ Voor 14% gewijzigd door Verwijderd op 15-07-2003 12:27 ]


  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 21:11

Reptile209

- gers -

edit:
Laat & crap :+

[ Voor 93% gewijzigd door Reptile209 op 15-07-2003 12:10 ]

Zo scherp als een voetbal!

Pagina: 1