Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Byte Array formatieren
sixt173
myCSharp.de - Member



Dabei seit:
Beiträge: 3

Themenstarter:

Byte Array formatieren

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
grazi
myCSharp.de - Member



Dabei seit:
Beiträge: 11
Herkunft: BL, CH

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo sixt173,

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

herbivore
private Nachricht | Beiträge des Benutzers
v1vec
myCSharp.de - Member



Dabei seit:
Beiträge: 52

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo v1vec,

also selber mit einzelnen Hexziffern rumhampeln muss man sicher nicht.

herbivore
private Nachricht | Beiträge des Benutzers
v1vec
myCSharp.de - Member



Dabei seit:
Beiträge: 52

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
ikaros
myCSharp.de - Member



Dabei seit:
Beiträge: 1.739

beantworten | zitieren | melden

Zitat
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.
private Nachricht | Beiträge des Benutzers
Red_Wraith
myCSharp.de - Member



Dabei seit:
Beiträge: 150

beantworten | zitieren | melden

Zitat
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.
private Nachricht | Beiträge des Benutzers
ikaros
myCSharp.de - Member



Dabei seit:
Beiträge: 1.739

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Red_Wraith
myCSharp.de - Member



Dabei seit:
Beiträge: 150

beantworten | zitieren | melden

Zitat
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)?
private Nachricht | Beiträge des Benutzers
ikaros
myCSharp.de - Member



Dabei seit:
Beiträge: 1.739

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Red_Wraith
myCSharp.de - Member



Dabei seit:
Beiträge: 150

beantworten | zitieren | melden

Zitat
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#.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Red_Wraith,

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

herbivore
private Nachricht | Beiträge des Benutzers