How to use string.Format() to format a hex number surrounded by curly brackets?

筅森魡賤 提交于 2019-11-29 09:23:10

See "Escaping Braces" in http://msdn.microsoft.com/en-us/library/txafckwd(v=vs.110).aspx - basically your workaround is a solution.

From there:

The way escaped braces are interpreted can lead to unexpected results. For example, consider the format item "{{{0:D}}}", which is intended to display an opening brace, a numeric value formatted as a decimal number, and a closing brace. However, the format item is actually interpreted in the following manner:

1.The first two opening braces ("{{") are escaped and yield one opening brace.
2. The next three characters ("{0:") are interpreted as the start of a format item.
3. The next character ("D") would be interpreted as the Decimal standard numeric format specifier, but the next two escaped braces ("}}") yield a single brace. Because the resulting string ("D}") is not a standard numeric format specifier, the resulting string is interpreted as a custom format string that means display the literal string "D}".
4. The last brace ("}") is interpreted as the end of the format item.
5. The final result that is displayed is the literal string, "{D}". The numeric value that was to be formatted is not displayed.

and as a solution, adjusted to your example:

uint hex = 0xdeadbeef;
string output = string.Format("{0}{1:x}{2}", 
                             "{", hex, "}");
Console.WriteLine(output);

Closest i got is

string.Format("{{{0:x}\u200B}}",16)

It seems that }}} is interpreted wrong, inserting a zero-width space prevents the first two } being expanded as an escaped } character.

You can use an empty character or add brackets as arguments:

uint hex = 0xdeadbeef;
string result = string.Format("{0}{1:x}{2}", "{", hex, "}");

This will output you {deadbeef} as you wanted.

This happens because to output } in string.Format you have to escape it like this }}.

But when you enter }}} it understands this like }} } and outputs {x}. This is a design bug in C#, when you try to format your output like :x, :N or else.

You can also try

uint hex = 0xdeadbeef;
string result = string.Format("{{ {1:x} }}", hex);

But this will output you { deadbeef } with spaces.

Try this : Use 2 times String.Format Method like this

String result= String.Format("{{{0}}}",String.Format("{0:x}", hex));
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!