Avatar billede morten_s Nybegynder
14. december 2001 - 10:19 Der er 10 kommentarer og
3 løsninger

Hjælp til HexToBin

Jeg har en streng LedString som indeholder værdien 4e
den vil jeg gerne have konverteret til en binær
representation, men får kun en exeception fejl på nedenstående kode ?

var
  LedString, LedBuf : String;
  Led, LedBufSize : Integer;
begin
  LedString := LowerCase(LedString);
  Led := HexToBin(PChar(LedString), PChar(LedBuf), 100);
  ShowMessage(inttostr(led));
end;


Delphi hjælp siger følgende om HexToBin:

function HexToBin(Text, Buffer: PChar; BufSize: Integer): Integer

Description

Call HexToBin to convert the hexadecimal string Text to the binary value it represents.

Text is a string representation of a hexadecimal value.

Buffer returns the resulting value in binary.

BufSize is the size of Buffer. Text needs to point to at least 2*BufSize hexadecimal characters, because each two hexadecimal characters represent one byte.

HexToBin returns the number of characters in Buffer that have not been used because Text did not contain valid hexadecimal characters (\'0\'..\'f\').

Note:    The hexadecimal number must use lower-case characters; HexToBind does not recognize upper-case characters.
Avatar billede pellelil Nybegynder
14. december 2001 - 10:23 #1
Prøv med en: SetLength(LedBuf, 100); inden du kalder HexToBin
Avatar billede morten_s Nybegynder
14. december 2001 - 10:25 #2
pellelil> de 100 er bare et tal jeg har sat ind i mangel af bedre
Avatar billede pellelil Nybegynder
14. december 2001 - 10:26 #3
I stedet for 100 kan du bruge en faktor 4 (der bruges 4 binære-cifre til \"at beskrive\" hvert hex-ciffer). Så du kunne i stedet bruge:

  SetLength(LedBuf, Length(LedString)*4);
  Led := HexToBin(PChar(LedString), PChar(LedBuf), Length(LedString)*4);
Avatar billede morten_s Nybegynder
14. december 2001 - 10:28 #4

var
  LedString, LedBuf : String;
  Led, LedBufSize : Integer;
begin
  LedString := LowerCase(LedString);
  SetLength(LedBuf, 100);
  Led := HexToBin(PChar(LedString), PChar(LedBuf), 100);
  ShowMessage(inttostr(led));
end;

Denne kode giver Led = 1 når LedString = 4e ??????


Avatar billede pellelil Nybegynder
14. december 2001 - 10:33 #5
Jeg har ikke selv brugt HexToBin, men hvis du \"leder efter\" den binære værdi (se den som 0\'er og 1\'er) vil jeg tro du skal kigge på strengen \"LedBuf\".
Avatar billede morten_s Nybegynder
14. december 2001 - 10:39 #6
Ja det har du nok ret i :) men der står nu ikke noget
fornuftigt i den, kun nogle tilfældige karaktere fra en anden streng
jeg har et andet sted i systemet
Avatar billede borrisholt Novice
14. december 2001 - 10:40 #7
prøv den her :
procedure TForm1.Button1Click(Sender: TObject);
var
  E: Extended;
  //Make sure there is room for null terminator
  Buf: array[0..SizeOf(Extended) * 2] of Char;
begin
  E := Pi;
  Label1.Caption := Format(\'E starts off as %.15f\', [E]);
  BinToHex(@E, Buf, SizeOf(E));
  //Slot in the null terminator for the PChar, so we can display it easily
  Buf[SizeOf(Buf) - 1] := #0;
  Label2.Caption := Format(\'As text, the binary contents of E look like %s\', [Buf]);
  //Translate just the characters, not the null terminator
  HexToBin(Buf, @E, SizeOf(Buf) - 1);
  Label3.Caption := Format(\'Back from text to binary, E is now %.15f\', [E]);
end;

Jens B
Avatar billede morten_s Nybegynder
14. december 2001 - 10:47 #8
Jens> Prøv lige og kast det på en form og
      sig mig om Label2 ser binær ud når du trykker på knappen ???
     
Avatar billede borrisholt Novice
14. december 2001 - 10:48 #9
meget :-)

Jens B
Avatar billede morten_s Nybegynder
14. december 2001 - 10:52 #10
ikke hos mig, jeg får 35C26.....

sikke noget skrammel
Avatar billede stoney Nybegynder
14. december 2001 - 10:54 #11
function HexToBin(Hexadecimal:string):string;
const
BCD: array [0..15] of string =
(\'0000\',\'0001\',\'0010\',\'0011\',\'0100\',\'0101\',\'0110\',\'0111\',
\'1000\',\'1001\',\'1010\',\'1011\',\'1100\',\'1101\',\'1110\',\'1111\');
var
i: integer;
begin
for i := Length(Hexadecimal) downto 1 do
Result := BCD[StrToInt(\'$\'+Hexadecimal[i])] + Result;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(HexToBin(\'FFA1\'));
// Returns 1111111110100001
end;


Stoney
Avatar billede morten_s Nybegynder
14. december 2001 - 10:58 #12
Stoney> Der var den mange tak :)
Avatar billede hreiff Nybegynder
14. december 2001 - 11:13 #13
Prøv denne her modificerede AsciiToBin:

Type s8= string[8]

function MyHexToBin(const ch: char): s8;
var
  i,x: integer;
begin
  case ch of
  \'0\'..\'9\': x := ord(ch)-48;    {\'0\' => 0}
  \'a\'..\'f\': x := ord(ch)-87;    {\'a\' => 10}
  \'A\'..\'F\': x := ord(ch)-55;    {\'A\' => 10}
  else
    x := 0;                    { alt andet giver 0}
  end;
  for i := 0 to 7 do
  begin
    result[8-i]:= chr((x and 1)+48);
    x:= x shr 1;
  end;
end;

Binærværdi := MyHexToBin(LedString[1]+MyHexToBin(LedString[2]);
(eller hvis der er flere må du lave en løkke)

//hreiff
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