【问题标题】:ToString("X") produces single digit hex numbersToString("X") 产生一位十六进制数
【发布时间】:2013-02-20 09:56:27
【问题描述】:

我们编写了一个粗略的数据范围。

(我们发现的免费终端程序无法跟上蓝牙速度)

结果没问题,我们正在将它们写入逗号分隔的文件中,以便与电子表格一起使用。最好在 RichTextBox 的漂亮列中看到十六进制值排列,而不是现在的样子(附加屏幕上限)。

这是将数字(例如,从 0FF 的数字)添加到 RichTextBox 中的文本的例程。

  public void Write(byte[] b)
         {
             if (writting)
             {
                 for (int i = 0; i < b.Length; i++)
                 {
                     storage[sPlace++] = b[i];

                     pass += b[i].ToString("X") + " ";  //// <<<--- Here is the problem

                     if (sPlace % numericUpDown1.Value == 0)
                     {
                         pass += "\r\n";
                     }
                 }
             }
         }

我希望指令 pass += b[i].ToString("X") + " "; 在从 00h0Fh 的值上产生前导零

或者,将字节 b 中的值转换为从 00FF 的两个字母字符的其他方法

左边的数字,FF 40 0 5 排列整齐,因为它们是相同的。一旦我们遇到数据中的任何差异,列就会消失,并且人类观察数据变得非常难以阅读。

【问题讨论】:

  • 你可能已经不在乎了,但这确实应该使用StringBuilder,而不是重复连接字符串。
  • 您的 UI 控件是否也使用等宽字体?看起来 1 比 A 窄得多,所以即使你很好地格式化了十六进制,它仍然会错位

标签: c# hex


【解决方案1】:

使用composite 格式字符串:

pass += b[i].ToString("X2") + " ";

MSDN 上的文档Standard Numeric Format Strings 有示例。

【讨论】:

  • 超级。天才。 +1和答案。谢谢
  • @User.1 0.ToString("X2") 产生 002 表示要输出多少个字符(用0s 填充)。
  • 我得到了这个答案,但它不能解决使用非等宽字体的问题,例如 Consolas 或 Courier New。
  • @Tim - 主要问题是个位数输出。等宽字体将是解决方案的另一部分。
  • @Tim Oded 的回答,加上这一行,为我们提供了我们想要的准系统数据范围:richTextBox1.Font = new Font(FontFamily.GenericMonospace, 14);认为你可以把它放在Form1_Load的任何地方>
猜你喜欢
  • 2018-11-30
  • 1970-01-01
  • 2016-07-31
  • 2012-08-22
  • 2011-03-23
  • 1970-01-01
  • 2016-09-06
  • 2018-08-26
  • 1970-01-01
相关资源
最近更新 更多