Laden...

Byte Array formatieren

Erstellt von sixt173 vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.658 Views
S
sixt173 Themenstarter:in
3 Beiträge seit 2004
vor 17 Jahren
Byte Array formatieren

Hallo,

ich bin neu im C# Bereich und würde gern ein Array aus Bytes als HEX - Darstellung repräsentieren.
In der MSDN - Dokumentation hab ich dafür nichts gefunden. Gibt es hier eine einfache Möglichkeit, beispielsweise mit:

Convert.ChangeType (...)

Zwar gäbe es die Möglichkeit alles umzurechnen, aber letztendlich ist es doch nur eine Darstellungsfrage. Im Debugger gibt es ja schließlich auch die Möglichkeit, sich die hex Werte Anzeigen zu lassen.

Für Vorschläge und Ideen wäre ich dankbar.

G
11 Beiträge seit 2004
vor 17 Jahren

wie willst du das denn darstellen? bei ner konsolenausgabe könntest du es mit

Console.WriteLine("Wert in bytArr[0]: {0:x}", bytArr[0]);

machen.
Egal, wie du's ausgibst, dieses ':x' ist der schlüssel

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo sixt173,

eine fertige Methode gibt es m.E. nicht ==> byte.ToString/String.Format + StringBuilder.Append

herbivore

V
52 Beiträge seit 2006
vor 17 Jahren

oder so:

static char[] hexDigits = {
        '0', '1', '2', '3', '4', '5', '6', '7',
        '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
 
    public static string ToHexString(byte[] bytes) {
        char[] chars = new char[bytes.Length * 2];
        for (int i = 0; i < bytes.Length; i++) {
            int b = bytes[i];
            chars[i * 2] = hexDigits[b >> 4];
            chars[i * 2 + 1] = hexDigits[b & 0xF];
        }
        return new string(chars);
    }

so stehts als beispiel in meiner lokalen msdn (deshalb auch kein link 🙁 )

edit: habs doch noch gefunden:
http://msdn2.microsoft.com/de-de/library/system.byte.aspx

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo v1vec,

also selber mit einzelnen Hexziffern rumhampeln muss man sicher nicht.

herbivore

V
52 Beiträge seit 2006
vor 17 Jahren

wie gesagt das war so als beispiel und erfüllt genau den gesuchten zweck also hab ichs reingepostet.
und ob das unbedingt schlechter ist als alles in einen string zu konvertieren is fraglich
is natürlich nicht ganz schön anzusehen, das stimmt

I
1.739 Beiträge seit 2005
vor 17 Jahren

wie gesagt das war so als beispiel und erfüllt genau den gesuchten zweck also hab ichs reingepostet.

Ist ja auch ok. Deine Lösung ist die klassische Lösung(für genau diesen Zweck).
Ich glaub nicht das Herbivore dich damit ärgern wollte.

Das .net framework bietet über die Convert-Klasse bereits fertige Algorithmen(zugegeben nicht für Arrays sondern Einzelwerte). Für die Basis 2(Dual), 8 (Oktal), 10 (Decimal) und 16(Hex).
Also nich für alle(2-36). Da wär noch ne Lücke(Der Alg. ist aber simpel(keine Loorbeeren)).
Dein Alg. ist schon ok. Ich denke nicht, dass Herbivore oder sonstwer den(oder dein Wissen) infrage stellt.
Der ist halt nur schon vorhanden in der grossen Lib der FCL.

R
150 Beiträge seit 2006
vor 17 Jahren

Original von v1vec
oder so:

chars[i * 2] = hexDigits[b >> 4];  
chars[i * 2 + 1] = hexDigits[b & 0xF];  
  

Kann mir bitte jemand die 2 Zeilen erklären? Ich kann mit dem b >> 4 und b & 0xF nichts anfangen und weiß auch nicht wie damit aus einer Zahl wie 235 eine Hexadezimalzahl wird.

Das ist nur rein Interesse halber, aber es wäre schön, wenn mir das jemand erklären könnte.

I
1.739 Beiträge seit 2005
vor 17 Jahren

Bin mal etwas Gemein:
b >> 4 : ist ne Verschiebiebung und zwar bitweise nach rechts um 4 Stellen.
b & 0xF ist eine &(Und) Verknüpfung der Variable b mit 15(dez).
Ich vermute als Erklärung wars nicht genug.
Falls es so sein sollte - Es ist trotz Schreibweise simple Mathematik(sehr simpel).
Hast du mit der Mathematik(in diesem Zusammenhang) ein Problem, dann poste es bitte. Das dürfte lösbar sein.

R
150 Beiträge seit 2006
vor 17 Jahren

Original von ikaros
Bin mal etwas Gemein:
b >> 4 : ist ne Verschiebiebung und zwar bitweise nach rechts um 4 Stellen.
b & 0xF ist eine &(Und) Verknüpfung der Variable b mit 15(dez).
Ich vermute als Erklärung wars nicht genug.
Falls es so sein sollte - Es ist trotz Schreibweise simple Mathematik(sehr simpel).
Hast du mit der Mathematik(in diesem Zusammenhang) ein Problem, dann poste es bitte. Das dürfte lösbar sein.

Okay, das Problem wird wohl in der Mathematik liegen. Mal angenommen die Zahl ist 10011011 (bin), also 155 (dez). Wie komme ich damit auf die Hexadezimaldarstellung 9B (hex)?

I
1.739 Beiträge seit 2005
vor 17 Jahren

Kannst das in String umwandeln(klar).
Dann schau mal nach Convert.ToMyValue (wert, basis)- Wert kann auch string sein....
Sollte das nicht Ausreichen erklär es bitte genauer.

R
150 Beiträge seit 2006
vor 17 Jahren

Original von ikaros
Kannst das in String umwandeln(klar).
Dann schau mal nach Convert.ToMyValue (wert, basis)- Wert kann auch string sein....
Sollte das nicht Ausreichen erklär es bitte genauer.

Meine Frage bezog sich eher darauf, wie man das allgemein umrechnet. Also nicht speziell über C#.

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Red_Wraith,

du musst dir nur angucken, was die BitOperationen '>>' und '&' machen. Dafür gibt es ja eine Doku. 🙂

herbivore