web-dev-qa-db-fra.com

String.Format pour Hex

Avec le code ci-dessous, le colorsting donne toujours #DDDD. Valeurs vertes, rouges et spatiales dans Comment résoudre ce problème?

string colorstring;
int Blue = 13;
int Green = 0;
int Red = 0;
int Space = 14;
colorstring = String.Format("#{0:X}{0:X}{0:X}{0:X}", Blue, Green, Red, Space);
35
codematrix

Le nombre 0 dans {0:X} fait référence à la position dans la liste ou aux arguments. Dans ce cas 0 signifie que vous utiliserez la première valeur, qui est Blue. Utilisation {1:X} pour le deuxième argument (Green), etc.

colorstring = String.Format("#{0:X}{1:X}{2:X}{3:X}", Blue, Green, Red, Space);

La syntaxe du paramètre format est décrite dans le documentation :

Format de la syntaxe de l'élément

Chaque élément de format prend la forme suivante et comprend les composants suivants:

{ index[,alignment][:formatString]}

Les accolades correspondantes ("{" et "}") sont obligatoires.

Composant d'index

Le composant d'index obligatoire, également appelé spécificateur de paramètre, est un nombre à partir de 0 qui identifie un élément correspondant dans la liste d'objets. En d'autres termes, l'élément de format dont le spécificateur de paramètre est 0 formate le premier objet de la liste, l'élément de format dont le spécificateur de paramètre est 1 formate le deuxième objet de la liste, etc.

Plusieurs éléments de format peuvent faire référence au même élément dans la liste d'objets en spécifiant le même spécificateur de paramètre. Par exemple, vous pouvez formater la même valeur numérique au format hexadécimal, scientifique et numérique en spécifiant une chaîne de format composite comme celle-ci: "{0: X} {0: E} {0: N}".

Chaque élément de format peut faire référence à n’importe quel objet de la liste. Par exemple, s'il y a trois objets, vous pouvez formater les deuxième, premier et troisième objets en spécifiant une chaîne de format composite comme celle-ci: "{1} {0} {2}". Un objet qui n'est pas référencé par un élément de format est ignoré. Une exception d'exécution est générée si un spécificateur de paramètre désigne un élément situé en dehors des limites de la liste d'objets.

Composant d'alignement

Le composant d'alignement optionnel est un entier signé indiquant la largeur de champ formatée préférée. Si la valeur d'alignement est inférieure à la longueur de la chaîne mise en forme, l'alignement est ignoré et la longueur de la chaîne mise en forme est utilisée comme largeur de champ. Les données formatées dans le champ sont alignées à droite si l'alignement est positif et à gauche si l'alignement est négatif. Si un remplissage est nécessaire, un espace est utilisé. La virgule est requise si l'alignement est spécifié.

Format String Component

Le composant optionnel formatString est une chaîne de format appropriée pour le type d'objet en cours de formatage. Spécifiez une chaîne de format numérique standard ou personnalisée si l'objet correspondant est une valeur numérique, une chaîne de format de date et d'heure standard ou personnalisée si l'objet correspondant est un objet DateTime ou une chaîne de format d'énumération si l'objet correspondant est une valeur d'énumération. Si formatString n'est pas spécifié, le spécificateur de format général ("G") pour un type numérique, date et heure ou énumération est utilisé. Les deux points sont requis si formatString est spécifié.

Notez que dans votre cas, vous ne disposez que de l'index et de la chaîne de format. Vous n'avez pas spécifié (et n'avez pas besoin de) un composant d'alignement.

60
Mark Byers

Vous pouvez également compléter les caractères laissés en incluant un nombre après le X, comme ceci: string.format("0x{0:X8}", string_to_modify), ce qui donne "0x00000C20".

37
JGeerWM

Traduire la couleur UInt32 composée Value en CSS dans .NET

Je sais que la question s'applique à 3 valeurs d'entrée (redgreenblue). Mais il peut y avoir une situation où vous avez déjà un composé 32 bits Value. Il semble que vous souhaitiez envoyer les données à un rendu HTML CSS (en raison du format #HEX). En réalité, CSS vous demande d’imprimer ici 6 chiffres hexadécimaux non remplis ou au moins 3. alors #{0:X06} ou #{0:X03} serait nécessaire. En raison d’un comportement étrange, il affiche toujours 8 chiffres au lieu de 6.

Résoudre ceci par:

String.Format("#{0:X02}{1:X02}{2:X02}", (Value & 0x00FF0000) >> 16, (Value & 0x0000FF00) >> 8, (Value & 0x000000FF) >> 0)
3
mschmoock

Plus généralement.

byte[] buf = new byte[] { 123, 2, 233 };

string s = String.Concat(buf.Select(b => b.ToString("X2")));
2
Luke Puplett

Si nous avons des fonctions intégrées pour convertir vos valeurs entières en COULEUR, alors pourquoi s’inquiéter.

string hexValue = string.Format("{0:X}", intColor);

Color brushes = System.Drawing.ColorTranslator.FromHtml("#"+hexValue);
2
Pranjal Jain