Avatar billede futterama Nybegynder
29. juli 2005 - 23:52 Der er 9 kommentarer og
1 løsning

Fra HEX værdi til binær værdi

Hej,

Jeg skal have konverteret en streng som HEX værdi f.eks. '1111' til binær, dvs. 1111H bliver til 0001000100010001B som streng i f.eks. en TEdit. Input 1111H kommer f.eks. også fra en TEdit.

Jeg har forsøgt mig lidt her:
http://eksperten.dk/spm/5884

Men jeg kan ikke hitte ud af at lave en const = $1111 til en variabel (gerne int) og det andet eksempel, der melder Delphi 7 fejl ved IntPower om "Operator not applicable to this operand type".

Nogen der kan hjælpe med de eksisterende eksempler eller med helt nye?

MVH
Futterama
Avatar billede arne_v Ekspert
29. juli 2005 - 23:58 #1
hex string -> integer:

v := StrToInt('$' + s);

hvor s kun er hex cifrene.

integer -> binary string:

s := IntToBin(v);

hvor:

function IntToBin(Value : Integer): String;

var
  tmp : Integer;
  digits : array [0..1] of char;

begin
  tmp := value;
  digits[0] := '0';
  digits[1] := '1';
  Result := '';
  while tmp > 0 do begin
    Result := digits[tmp and 1] + Result;
    tmp := tmp shr 1;
  end;
end;
Avatar billede futterama Nybegynder
30. juli 2005 - 12:35 #2
arne_v: Dit eksempel virker, dog ikke helt efter hensigten, jeg skal også bruge "leading zeros" i den binære representation. Men ved brug af v := StrToInt('$' + s); kan jeg tilrette pointwoods eksempel så det virker.

Tak for hjælpen, hvis du lægger et svar så kan jeg give dig point.
Avatar billede nielle Nybegynder
30. juli 2005 - 12:40 #3
Du kan også skrive:

Console.WriteLine(Result.ToString().PadLeft(8, '0'));
Avatar billede arne_v Ekspert
30. juli 2005 - 12:51 #4
svar
Avatar billede arne_v Ekspert
30. juli 2005 - 12:51 #5
nielle>

Console.WriteLine i Delphi 7 ?
Avatar billede futterama Nybegynder
30. juli 2005 - 14:55 #6
arne_v, kan man omskrive dit eksempel til at medtage "leading zeros"? Jeg har arbejdet lidt videre med det andet eksempel, men det er opbygget uhensigtsmæssigt i forhold til mit brug. Jeg skulle gerne ende med en funktion der returnerer en streng med 1'er og 0'er og tager en streng med en HEX-værdi som argument.
Avatar billede arne_v Ekspert
30. juli 2005 - 14:57 #7
ja - hvis du erstatter while løkken med en for løkke
Avatar billede arne_v Ekspert
30. juli 2005 - 14:58 #8
while tmp > 0 do begin
    Result := digits[tmp and 1] + Result;
    tmp := tmp shr 1;
  end;

->

  for i := 1 to 32 do begin
    Result := digits[tmp and 1] + Result;
    tmp := tmp shr 1;
  end;
Avatar billede nielle Nybegynder
30. juli 2005 - 18:08 #9
30/07-2005 12:51:21> Nej, selvfølgelig ikke (med mindre at det da er Delphi.NET ;^)
Avatar billede futterama Nybegynder
30. juli 2005 - 19:11 #10
Tak for svarene, jeg har nu det jeg skal bruge :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester