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.
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
Hallo sixt173,
eine fertige Methode gibt es m.E. nicht ==> byte.ToString/String.Format + StringBuilder.Append
herbivore
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
Hallo v1vec,
also selber mit einzelnen Hexziffern rumhampeln muss man sicher nicht.
herbivore
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
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.
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.
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.
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)?
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.
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#.
Hallo Red_Wraith,
du musst dir nur angucken, was die BitOperationen '>>' und '&' machen. Dafür gibt es ja eine Doku. 🙂
herbivore