使用以下代码,着色总是给出#DDDD。绿色,红色和空间值如何解决这个问题?
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);
答案 0 :(得分:59)
0
中的数字{0:X}
指的是列表或参数中的位置。在这种情况下,0
表示使用第一个值Blue
。使用{1:X}
作为第二个参数(Green
),依此类推。
colorstring = String.Format("#{0:X}{1:X}{2:X}{3:X}", Blue, Green, Red, Space);
格式参数的语法在documentation:
中描述格式项语法
每个格式项采用以下形式,包含以下组件:
{ index[,alignment][:formatString]}
匹配的大括号(“{”和“}”)是必需的。
索引组件
强制索引组件(也称为参数说明符)是从0开始的数字,用于标识对象列表中的相应项。也就是说,参数说明符为0的格式项格式化列表中的第一个对象,参数说明符为1的格式项格式化列表中的第二个对象,依此类推。
通过指定相同的参数说明符,多个格式项可以引用对象列表中的相同元素。例如,您可以通过指定如下所示的复合格式字符串来格式化十六进制,科学和数字格式的相同数值:“{0:X} {0:E} {0:N}”。
每个格式项都可以引用列表中的任何对象。例如,如果有三个对象,则可以通过指定如下所示的复合格式字符串来格式化第二个,第一个和第三个对象:“{1} {0} {2}”。将忽略未被格式项引用的对象。如果参数说明符指定了对象列表边界之外的项,则会产生运行时异常。
对齐组件
可选对齐组件是一个有符号整数,表示首选的格式化字段宽度。如果alignment的值小于格式化字符串的长度,则忽略alignment,并将格式化字符串的长度用作字段宽度。如果对齐为正,则字段中的格式化数据右对齐,如果对齐为负,则对齐左对齐。如果需要填充,则使用空格。如果指定了对齐,则需要逗号。
格式化字符串组件
可选的formatString组件是一种格式字符串,适用于要格式化的对象类型。如果相应对象是数值,则指定标准或自定义数字格式字符串;如果相应对象是DateTime对象,则指定标准或自定义日期和时间格式字符串;如果相应对象是枚举值,则指定枚举格式字符串。如果未指定formatString,则使用数字,日期和时间或枚举类型的通用(“G”)格式说明符。如果指定了formatString,则需要冒号。
请注意,在您的情况下,您只有索引和格式字符串。您尚未指定(并且不需要)对齐组件。
答案 1 :(得分:37)
您还可以通过在X
后面添加一个数字来填充剩下的字符,例如:string.format("0x{0:X8}", string_to_modify)
,这会产生"0x00000C20"
。
答案 2 :(得分:3)
将组合的UInt32颜色Value
翻译为.NET中的CSS
我知道这个问题适用于3个输入值(red
green
blue
)。但是可能存在已经具有32位Value
的组合的情况。看起来您想要将数据发送到某些HTML CSS渲染器(因为#HEX格式)。实际上CSS希望你在这里打印6个或至少3个零填充的十六进制数字。因此需要#{0:X06}
或#{0:X03}
。由于一些奇怪的行为,它总是打印8位而不是6位。
解决这个问题:
String.Format("#{0:X02}{1:X02}{2:X02}", (Value & 0x00FF0000) >> 16, (Value & 0x0000FF00) >> 8, (Value & 0x000000FF) >> 0)
答案 3 :(得分:2)
如果我们有内置函数将您的整数值转换为COLOR,那么为什么要担心。
string hexValue = string.Format("{0:X}", intColor);
Color brushes = System.Drawing.ColorTranslator.FromHtml("#"+hexValue);
答案 4 :(得分:2)
更普遍。
byte[] buf = new byte[] { 123, 2, 233 };
string s = String.Concat(buf.Select(b => b.ToString("X2")));