C# Hexwerte nach eingabe in int/byte konvertieren

Paladin.de

Lt. Junior Grade
Registriert
Juli 2008
Beiträge
421
Hallo CB'ler

ich bin gerade am Proggen und bin auf ein doofes Problem gestoßen.

Also: Anforderung an das Programm (vorerst): in ein Textfeld sollen ein-oder mehrere Hexwerte eingegeben werden und zur weiterverarbeitung in ein Byte-Array gespeichert werden. kurz: FF Eingeben --> als Byte speichern


Eingabe: 1A 3B FF 00 44 etc.

habe es bereits gechafft die gruppen per String.split und String.ToCharArray auseinanderzufriemeln. mit String.ToLower werden alle Großbuchstaben in Kleinbuchstaben umgewandelt mehr dazu unten.

Also: ein String array mit je 2 chars.

Leider kann ich diese nicht korrekt in Bytes konvertieren, da diese ja in ASCII Codiert sind.

mein ansatz ist im moment 2 große switches zu implementieren. beide haben 16 cases ('0' bis 'f') und sind jeweils für 4 bit zuständig. Je nach case wird dann eine zahl zu einem int dazuaddiert, um den entsprechenden zahlenwert des Bytes zu bekommen. Diesen könnte ich nun in Byte konvertieren

Nachteil: Elend langer Quellcode mit mehreren Schleifen und Arrays


nun eine ganz einfache Frage: gehts vielleicht eleganter ? bin erst vor kurzen von C++ zu C# gewechselt. Gibts vielleicht ne implementierte Funktion die das kann?
 
Code:
      byte data;
      string sData = "FF";
      if (byte.TryParse(sData, System.Globalization.NumberStyles.HexNumber, null, out data))
        Console.WriteLine("{0}: {1}", sData, data);
      else
        Console.WriteLine("Not convertable: {0}", sData);

Versuchs einfach mit byte.TryParse(). Die Parameter kannst du aus den oberen Beispielen entnehmen.

Viel Erfolg.
 
Zuletzt bearbeitet:
sieht schon ganz brauchbar aus, werds morgen mal testen

vielen dank
 
die umrechnung von zahlensystem x in y geht doch eigentlich einfach von statten. hab mal ne funktion in php dafür geschrieben:
PHP:
const DECODESTRING_BIN = '01';
const DECODESTRING_OCT = '01234567';
const DECODESTRING_DEC = '0123456789';
const DECODESTRING_HEX = '0123456789abcdef';
# natürlich is nur diese funktion für dich relevant, aber der vollständigkeit halber...
function DecodeString( $String, $Base )
{
  $r = 0;
  $len = strlen( $Base );
  $String = strtolower( $String );
  
  for( $i = strlen( $String ) - 1; $i >= 0; $i-- )
    $r += stripos( $Base, $String[$i] ) * pow( $len, strlen( $String ) - $i - 1 );
  
  return $r;
}
function HexToInt( $Hex ) { return DecodeString( $Hex, DECODESTRING_HEX ); }

const ENCODENUMBER_BIN = DECODESTRING_BIN;
const ENCODENUMBER_OCT = DECODESTRING_OCT;
const ENCODENUMBER_DEC = DECODESTRING_DEC;
const ENCODENUMBER_HEX = DECODESTRING_HEX;
function EncodeNumber( $Value, $Base )
{
  $r = '';
  $len = strlen( $Base );
  
  while( $Value > $len )
  {
    $r = $Base[$Value % $len].$r;
    $Value /= $len;
    $Value = floor( $Value );
  }
  $r = $Base[$Value % $len].$r;
  
  return $r;
}
function IntToHex( $Int, $UpperCase = false )
{
  $r = EncodeNumber( $Int, ENCODENUMBER_HEX );
  return $UpperCase ?
           strtoupper( $r ) :
           strtolower( $r );
}
 
Zurück
Oben