输入: uint hex = 0xdeadbeef;
所需输出: string result = "{deadbeef}"
第一种方法:明确添加{和}; 这工作:
result = "{" + string.Format("{0:x}", hex) + "}"; // -> "{deadbeef}"
Run Code Online (Sandbox Code Playgroud)
使用转义大括号输出为十进制而不是十六进制:
result = string.Format("{{{0}}}", hex); // -> "{3735928559}"
Run Code Online (Sandbox Code Playgroud)
似乎很有希望,现在我们需要做的就是:x按照上面的第一种方法添加十六进制说明符:
result = string.Format("{{{0:x}}}", hex); // -> "{x}"
Run Code Online (Sandbox Code Playgroud)
哦,亲爱的,添加它':x已经使它输出"{x}"而不是"{deadbeef}"我想要的.
所以我的问题是:我必须通过显式添加{和}按照第一个示例来解决这个问题,或者有没有办法使用复合格式化并转义大括号?
另请注意,这也会影响字符串插值(毕竟)只是由编译器转换为调用string.Format().
(这可能是重复的问题,但到目前为止我一直无法找到重复...)
编辑
请参阅http://msdn.microsoft.com/en-us/library/txafckwd(v=vs.110).aspx中的 "转义大括号" - 基本上您的解决方法是一种解决方案.
从那里:
解释转义大括号的方式会导致意外结果.例如,考虑格式项"{{{0:D}}}",其用于显示左大括号,格式为十进制数的数值和右大括号.但是,格式项实际上是按以下方式解释的:
1.前两个开口支架("{{")被转出并产生一个开口支架.
2.接下来的三个字符("{0:")被解释为格式项的开头.
3.下一个字符("D")将被解释为十进制标准数字格式说明符,但接下来的两个转义大括号("}}")将产生一个大括号.由于结果字符串("D}")不是标准数字格式说明符,因此结果字符串将被解释为自定义格式字符串,这意味着显示文字字符串"D}".
4.最后一个括号("}")被解释为格式项的结尾.
5.显示的最终结果是文字字符串"{D}".不显示要格式化的数值.
并作为解决方案,根据您的示例调整:
uint hex = 0xdeadbeef;
string output = string.Format("{0}{1:x}{2}",
"{", hex, "}");
Console.WriteLine(output);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1836 次 |
| 最近记录: |