十六进制的String.Format

cod*_*rix 36 c# string formatting hex

使用下面的代码,着色总是给出#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);
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 61

数字0in {0:X}表示列表或参数中的位置.在这种情况下,0意味着使用第一个值,即Blue.使用{1:X}第二个参数(Green),等等.

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

format参数的语法在文档中描述:

格式项语法

每个格式项采用以下形式,包含以下组件:

{ index[,alignment][:formatString]}
Run Code Online (Sandbox Code Playgroud)

匹配的大括号("{"和"}")是必需的.

索引组件

强制索引组件(也称为参数说明符)是从0开始的数字,用于标识对象列表中的相应项.也就是说,参数说明符为0的格式项格式化列表中的第一个对象,参数说明符为1的格式项格式化列表中的第二个对象,依此类推.

通过指定相同的参数说明符,多个格式项可以引用对象列表中的相同元素.例如,您可以通过指定如下所示的复合格式字符串来格式化十六进制,科学和数字格式的相同数值:"{0:X} {0:E} {0:N}".

每个格式项都可以引用列表中的任何对象.例如,如果有三个对象,则可以通过指定如下所示的复合格式字符串来格式化第二个,第一个和第三个对象:"{1} {0} {2}".将忽略未被格式项引用的对象.如果参数说明符指定对象列表范围之外的项,则会产生运行时异常.

对齐组件

可选的对齐组件是一个有符号整数,表示首选的格式化字段宽度.如果alignment的值小于格式化字符串的长度,则忽略alignment,并将格式化字符串的长度用作字段宽度.如果对齐为正,则字段中的格式化数据右对齐,如果对齐为负,则对齐左对齐.如果需要填充,则使用空格.如果指定了对齐,则需要逗号.

格式字符串组件

可选的formatString组件是一种格式字符串,适用于正在格式化的对象类型.如果相应对象是数值,则指定标准或自定义数字格式字符串;如果相应对象是DateTime对象,则指定标准或自定义日期和时间格式字符串;如果相应对象是枚举值,则指定枚举格式字符串.如果未指定formatString,则使用数字,日期和时间或枚举类型的通用("G")格式说明符.如果指定了formatString,则需要冒号.

请注意,在您的情况下,您只有索引和格式字符串.您尚未指定(并且不需要)对齐组件.

  • 格式字符串应该是{0:X2}等,以明确无误. (21认同)

JGe*_*rWM 38

您还可以通过在数字后面加上一个数字来填充左边的字符X,例如:string.format("0x{0:X8}", string_to_modify)产生"0x00000C20".


msc*_*ock 5

将组合的 UInt32 颜色Value转换为 .NET 中的 CSS

我知道这个问题适用于 3 个输入值 ( red green blue)。但是可能存在这样的情况,您已经拥有一个组合的 32bit 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)
Run Code Online (Sandbox Code Playgroud)