使其成爲一個兩步過程:從三種格式之一解析字符串,然後轉換爲三種格式之一。
要解析,您可以使用各自的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);
}
}
你是什麼意思「在一個功能」?如果你想獲得不同的轉換,你應該讓每個轉換都有自己的功能。 – annonymously 2012-02-05 00:20:19
是的,但我想使用像'Convert.toString(inputType,inputValue,outputType)'相同的方法',而不必處理多個技巧從一種類型轉換爲另一種。 – 2012-02-05 00:24:43
看來你正在尋找這個,但在C#中:http://www.cplusplus.com/reference/clibrary/cstdlib/itoa/ – BlackBear 2012-02-05 00:34:21