Entwickler-Ecke
Basistechnologien - int Konvertierung zu Hex (für Darstellung in HTML)
thebaaaam - Mo 19.05.14 22:32
Titel: int Konvertierung zu Hex (für Darstellung in HTML)
Hallo zusammen
Für die Darstellung von Felder mit einer Farbe in einer Website muss ich den Farb-Wert von einem int in einen Hex-String konvertieren.
Soweit so gut. Eigentlich banal oder?
Ich habe das bisher so gemacht:
C#-Quelltext
1:
| 8674610.ToString("X6") |
Nun wurde mir aber gesagt, dass dies falsch sei bzw. die Werte nicht stimmen.
Die Konvertierung soll so erfolgen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| public static String Convert2HexColor(this int color) { Color c = Color.FromArgb(color); String rtn = String.Empty; rtn = c.R.ToString("X2") + c.G.ToString("X2") + c.B.ToString("X2"); return rtn; } |
...
C#-Quelltext
1:
| 8674610.Convert2HexColor() |
nun bei den Tests die ich gemacht habe bekomme ich immer identische Werte mit beiden Varianten.
Ist das Ergebnis nun in beiden Varianten dasselbe oder nicht?
mfg
Patrick
Th69 - Di 20.05.14 08:56
Hallo und :welcome:
auf den ersten Blick scheint es identisch zu sein, ABER...
Dies gilt nur für Werte vom Typ RGB, sobald jedoch auch ein Alpha-Wert (d.h. ARGB) vorliegt, bekommt man bei der ersten Variante dann z.B. "FFAABBCC" raus, dagegen bei der 2. Variante nur "AABBCC" - die Angabe der Größe ist ja eine Mindestgröße.
Es kommt also drauf an, woher der
Color (bzw.
int)-Wert kommt und wie er interpretiert werden soll.
Edit: es gibt noch Alternativen:
C#-Quelltext
1:
| String.Format("#{0:X2}{1:X2}{2:X2}", c.R, c.G, c.B) |
ColorTranslator.ToHtml [
http://msdn.microsoft.com/de-de/library/system.drawing.colortranslator.tohtml%28v=vs.110%29.aspx] (hier erhältst du aber evtl. die Webfarbnamen, z.B. "Red", "Green" "Blue" etc.)
PS. Die Zuweisung von
String.Empty (in deiner 2. Variante) ist überflüssig!
thebaaaam - Di 20.05.14 12:32
Da sind mir wohl 8 Bit durch die lappen gegangen :lol:
In meinem Fall ist es so, dass nur RGB von Interesse ist, jedoch auch negative int Werte daher kommen was dann Werte im Alpha bedeutet.
Und irgendwie habe ich das mit der Mindestgrösse überlesen :idea:
Meine Lösung (RRGGBB) sieht nun wie folgt aus:
C#-Quelltext
1: 2: 3: 4:
| public static string ToX6RGB(this int value) { return (value & 0x00FFFFFF).ToString("X6"); } |
Geh ich richtig in meiner Annahme das dies jetzt 100% stimmt für RRGGBB aus einem int (AARRGGBB) auszugeben?
Th69 - Di 20.05.14 13:52
Ja, müsste m.E. jetzt so stimmen.
Am besten aber du schreibst ein paar Unit-Tests (u.a. mit Grenzfällen) dafür. ;-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!