14. december 2001 - 10:19Der 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.
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\".
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
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;
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;
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
Synes godt om
Ny brugerNybegynder
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.