C#中的整数二进制十六进制转换器

时间:2012-02-05 00:05:32

标签: c# .net string

我正在使用C#编写转换器,将整数,二进制和十六进制转换为相同的格式。当然,给出了输入格式和输出格式。 另一个有趣的观点是我的输入是string,我的输出也是string

所以,现在我想知道是否有办法使用相同的功能进行所有这些转换,因为在我探索的所有问题中,我的6个案例中只有一个给出了一些解决方案,我觉得它并不优雅。

总结:

Input String | Output String
-------------|--------------
int32        | hexa
int32        | binary
binary       | int32
binary       | hexa
hexa         | int32
hexa         | binary

编辑:如有必要,将使用try-catch处理所有异常。

1 个答案:

答案 0 :(得分:1)

分为两步:从三种格式中的一种解析字符串,然后转换为三种格式之一。

要进行解析,您可以使用相应的Parse(或TryParse,如果您想避免例外)方法,这些方法适用于不同的数字类型。在整数类型上,您可以使用NumberStyles.HexNumber从十六进制数中解析。

要转换为字符串,请使用具有适当文化和格式的重载ToString

请注意,您可以通过IConvertible界面进行类型转换,所有本机号码类型都支持该界面。

这是一些伪代码(不会编译但应该说明所做的点):

enum NumberKind {
  Int32,
  Decimal,
  Hexa
}

string ConvertNumber(NumberKind inputKind, string inputValue, NumberKind outputKind) {
  IConvertible intermediate;
  switch (inputKind) {
  case NumberKind.Int32:
    intermediate = Int32.Parse(inputValue, NumberStyles.Integer, CultureInfo.InvariantCulture);
    break;
  case NumberKind.Decimal:
    intermediate = Decimal.Parse(inputValue, NumberStyles.Number, CultureInfo.InvariantCulture);
    break;
  case NumberKind.Hexa:
    intermediate = Int32.Parse(inputValue, NumberStyles.HexNumber, CultureInfo.InvariantCulture);
    break;
  }
  switch (outputKind) {
  case NumberKind.Int32:
    return intermediate.ToInt32().ToString("D", CultureInfo.InvariantCulture);
  case NumberKind.Decimal:
    return intermediate.ToDecimal().ToString("G", CultureInfo.InvariantCulture);
  case NumberKind.Hexa:
    return intermediate.ToInt32().ToString("X", CultureInfo.InvariantCulture);
  }
}