【问题标题】:Strange FormatException when converting to octal转换为八进制时出现奇怪的 FormatException
【发布时间】:2016-12-07 22:31:02
【问题描述】:

所以我有一个 integer 数字 208 我不希望很多人理解 为什么我这样做,但我正在尝试的最终结果要做的是获取八进制数 208(二零八)的 base-10 表示。我希望令人困惑的事情(对于那些试图回答这个问题的人来说)是,虽然 208 是一个整数,但我使用它更像是一个包含字符 2、0 和 8 的字符串。 如果对此还有任何问题,请告诉我,因为我认为这会引起一些混乱。

无论如何,要获得“208”的 base-10 表示,我就是这样做的:

  1. int208 转换为string“208”。
  2. string“208”,并从八进制解析为十进制

那么,下面是对应的源码:

public byte OctalToDecimal(int octalDigits)
{
    byte decimalValue = 0;
    string octalString = string.Empty;

    // first, get a string representation of the integer number
    octalString = octalDigits.ToString();

    // now, get the decimal value of the octal string
    decimalValue = Convert.ToByte(octalString, 8);

    // set the decimal-value as the label
    return decimalValue;
}

octalDigits = 208 时出现格式异常。我收到一条消息,称octalString 的值中有其他字符。为什么会这样?我所做的就是从int 转换为string,它非常短/简单,不像我在上面附加任何东西。怎么回事?

【问题讨论】:

  • 那是因为8 不是八进制数的无效数字。八进制符号范围从07
  • 208 不是一个有效的八进制数。您不能在八进制数中包含数字 8。在任何情况下,int 都会存储实际值。谈论基础和表示是没有意义的——没有。尝试将实际值格式化为字符串时,Base-10 或 8 有意义。
  • 我怀疑这是XY problem 的情况——你有一个问题X,认为Y 是解决方案,所以当你遇到麻烦时你问Y。您的实际问题是什么?
  • @PanagiotisKanavos 完全同意。谢谢。
  • 虽然,当异常消息谈到有多余的字符时......好吧,我认为这有点误导我。但我也不得不羞耻地承认我不知道八进制数以 7 结尾。

标签: c# decimal octal


【解决方案1】:

你应该知道八进制数的位数在 0 到 7 之间

这里有一些有用的链接

the octal representations of bytes range from 000 to 377?

http://www.asciitable.com/

【讨论】:

  • 这应该是评论,而不是答案
【解决方案2】:

八进制数不能包含数字 8,例如 base-10 表示不能包含“数字”10,二进制不能包含数字 2。

【讨论】:

  • 这应该是评论,而不是答案
猜你喜欢
  • 2017-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-12
  • 2020-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多