c# - IFormattable.ToString 无法按预期进行十六进制格式化

标签 c# formatting hex string-formatting

String.Format 和 IFormattable.ToString(format, value) 在尝试格式化为十六进制时提供不同的结果。使用 IFormattable.ToString(format, value) 时如何获得正确的结果

string format = "0x{0:X4}";
Console.WriteLine(string.Format(format, 255)); //prints- 0x00FF

IFormattable formattableValue = (IFormattable)255;
Console.WriteLine(formattableValue.ToString(format, null)); //prints- 25x{5:X4}

最佳答案

格式化字符串的格式对于 string.Format()ToString() 是不同的。特别是,string.Format() 允许在格式周围使用其他文本,而 IFormattable.ToString() 只允许文本本身的格式说明符。

在您的示例中,格式字符串 "0x{0:X4}" 被视为值 255 的整个格式说明符。0 是占位符数字,其余只是额外的字 rune 字。

如果您希望 IFormattable.ToString() 输出与 string.Format() 相同的结果,您必须以等效的方式使用它:

"0x" + formattableValue.ToString("X4", null);

关于c# - IFormattable.ToString 无法按预期进行十六进制格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33771524/

相关文章:

c# - 为什么 WCF 服务函数中需要 OperationContract 属性?

ms-access - 设置重复值单元格的格式以使其不可见

python - 使用 Python 中包含的格式化标签从 Gtk3 TextView/TextBuffer 获取文本

c++ - 如何在 C++ 中将 unsigned char[] 打印为 HEX?

c# - Task.Run 和 UI 进度更新

c# - 带有标题和内容的 UserControl - 允许在内容面板中删除控件并防止在设计时在标题中删除控件

java - 如何检查严格格式的输入?

c++ - 如何以十六进制而不是 ASCII 符号显示实际值

python - 如何正确地将十六进制值传递到 Python ctypes 中的 C dll?

c# - 为什么 SQL 查询不运行?