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

C# C语言中的整数二进制六进制转换器#,c#,.net,string,C#,.net,String,我正在用C#编写一个转换器,将整数、二进制和十六进制转换为相同的格式。当然,输入格式和输出格式是给定的。 另一个有趣的地方是,我的输入是一个字符串,而我的输出也是一个字符串 所以,现在我想知道是否有一种方法可以使用相同的函数进行所有这些转换,因为在我探索的所有问题中,只有我的6个案例中的一个给出了一些解决方案,但我觉得这并不是很优雅 总结如下: Input String | Output String -------------|-------------- int32 | hex

我正在用C#编写一个转换器,将整数、二进制和十六进制转换为相同的格式。当然,输入格式和输出格式是给定的。 另一个有趣的地方是,我的输入是一个
字符串
,而我的输出也是一个
字符串

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

总结如下:

Input String | Output String -------------|-------------- int32 | hexa int32 | binary binary | int32 binary | hexa hexa | int32 hexa | binary 输入字符串|输出字符串 -------------|-------------- int32 | hexa int32 |二进制 二进制| int32 二元|六元 hexa | int32 六元二进制
编辑:如有必要,将使用try-catch处理所有异常

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

要进行解析,可以使用针对不同数值类型的相应的
parse
(或
TryParse
(如果希望避免异常)方法。在整数类型上,可以使用
NumberStyles.HexNumber
从十六进制数进行解析

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

请注意,您可以通过
IConvertible
接口进行类型转换,所有本机数字类型都支持该接口

下面是一些伪代码(不会编译,但应说明所提出的要点):


“在一个函数中”是什么意思?如果你想得到不同的转换,你应该让每一个都有自己的函数。是的,但是我想使用相同的方法,比如
Convert.toString(inputType,inputValue,outputType)
不用处理从一种类型转换到另一种类型的多种技巧。您似乎在寻找这一点,但在C#:非常感谢您的回答,您将我要寻找的哲学形式化了。我编辑我的问题是因为我写了
十进制
而不是
二进制
,但是你的答案很完美。我用这个解决方案完美地实现了我的转换器,我只想补充一点,必须使用系统来使用
以使用数字样式。
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);
  }
}