Подтвердить что ты не робот

String.Format для Hex

При использовании кода ниже colorsting всегда дает #DDDD. Зеленые, красные и пробельные значения int he Как исправить это?

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);
4b9b3361

Ответ 1

Число 0 в {0:X} относится к позиции в списке или аргументах. В этом случае 0 означает использование первого значения, которое равно Blue. Используйте {1:X} для второго аргумента (Green) и т.д.

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

Синтаксис параметра формата описан в документации:

Синтаксис элемента формата

Каждый элемент формата принимает следующий вид и состоит из следующих компонентов:

{ index[,alignment][:formatString]}

Требуются согласованные фигурные скобки ( "{" и "}" ).

Индексный компонент

Обязательным компонентом индекса, также называемым спецификатором параметра, является число, начинающееся с 0, которое идентифицирует соответствующий элемент в списке объектов. То есть, элемент формата, спецификатор параметра которого равен 0, форматирует первый объект в списке, элемент формата, спецификатор которого равен 1, форматирует второй объект в списке и т.д.

Элементы нескольких форматов могут ссылаться на один и тот же элемент в списке объектов, указывая один и тот же спецификатор параметров. Например, вы можете отформатировать одно и то же числовое значение в шестнадцатеричном, научном и числовом формате, указав такую ​​композитную строку формата: "{0: X} {0: E} {0: N}".

Каждый элемент формата может ссылаться на любой объект в списке. Например, если есть три объекта, вы можете отформатировать второй, первый и третий объекты, указав строку составного формата следующим образом: "{1} {0} {2}". Объект, на который не ссылается элемент формата, игнорируется. Исключение выполнения, если спецификатор параметра обозначает элемент за пределами списка объектов.

Компонент выравнивания

Необязательный компонент выравнивания представляет собой целое число со знаком, указывающее предпочтительную ширину форматированного поля. Если значение выравнивания меньше длины форматированной строки, выравнивание игнорируется, а длина форматированной строки используется как ширина поля. Отформатированные данные в поле выравниваются по правому краю, если выравнивание положительное и выравнивание по левому краю, если выравнивание отрицательное. Если требуется заполнить, используется пробел. Заданная запятая требуется, если указано выравнивание.

Компонент форматирования строк

Дополнительный компонент formatString - это строка формата, подходящая для типа форматируемого объекта. Укажите стандартную или пользовательскую строку числового формата, если соответствующий объект является числовым значением, стандартной или пользовательской строкой формата даты и времени, если соответствующий объект является объектом DateTime или строкой формата перечисления, если соответствующий объект является значением перечисления. Если formatString не указан, используется общий спецификатор формата ( "G" ) для числа, даты и времени или типа перечисления. Двоеточие требуется, если указано formatString.

Обратите внимание, что в вашем случае у вас есть только индекс и строка формата. Вы не указали (и не нуждаетесь) компонент выравнивания.

Ответ 2

Вы также можете вставить символы слева, включив число, следующее за X, например: string.format("0x{0:X8}", string_to_modify), которое дает "0x00000C20".

Ответ 3

Перевод написанный в формате UInt32 Value в CSS в .NET

Я знаю, что вопрос относится к 3 входным значениям (red green blue). Но может быть ситуация, когда у вас уже есть 32bit Value. Похоже, вы хотите отправить данные в какой-нибудь HTML-рендеринг CSS (из-за формата #HEX). На самом деле CSS хочет, чтобы вы напечатали 6 или не менее трех нулевых нумерованных цифр. поэтому потребуется #{0:X06} или #{0:X03}. Из-за какого-то странного поведения это всегда печатает 8 цифр вместо 6.

Решите это:

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

Ответ 4

Если у нас есть встроенные функции для преобразования ваших целых значений в ЦВЕТ, то зачем беспокоиться.

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

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

Ответ 5

В более общем плане.

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

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