我正在使用C#编写转换器,将整数,二进制和十六进制转换为相同的格式。当然,给出了输入格式和输出格式。
另一个有趣的观点是我的输入是string
,我的输出也是string
。
所以,现在我想知道是否有办法使用相同的功能进行所有这些转换,因为在我探索的所有问题中,我的6个案例中只有一个给出了一些解决方案,我觉得它并不优雅。
总结:
Input String | Output String -------------|-------------- int32 | hexa int32 | binary binary | int32 binary | hexa hexa | int32 hexa | binary
编辑:如有必要,将使用try-catch处理所有异常。
答案 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);
}
}