@@ -54,44 +54,34 @@ public static object To(this string value, Type type)
54
54
/// <returns></returns>
55
55
public static string BaseConvert ( this string source , int from , int to )
56
56
{
57
- const string chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
58
- var result = "" ;
59
- var length = source . Length ;
60
- var number = new int [ length ] ;
61
-
62
- for ( var i = 0 ; i < length ; i ++ )
57
+ var chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
58
+ var len = source . Length ;
59
+ if ( len == 0 )
60
+ throw new Exception ( string . Format ( "Parameter: '{0}' is not valid integer (in base {1})." , source , from ) ) ;
61
+ var minus = source [ 0 ] == '-' ? "-" : "" ;
62
+ var src = minus == "" ? source : source . Substring ( 1 ) ;
63
+ len = src . Length ;
64
+ if ( len == 0 )
65
+ throw new Exception ( string . Format ( "Parameter: '{0}' is not valid integer (in base {1})." , source , from ) ) ;
66
+
67
+ var d = 0 ;
68
+ for ( int i = 0 ; i < len ; i ++ ) // Convert to decimal
63
69
{
64
- number [ i ] = chars . IndexOf ( source [ i ] ) ;
70
+ int c = chars . IndexOf ( src [ i ] ) ;
71
+ if ( c >= from )
72
+ throw new Exception ( string . Format ( "Parameter: '{0}' is not valid integer (in base {1})." , source , from ) ) ;
73
+ d = d * from + c ;
65
74
}
75
+ if ( to == 10 || d == 0 )
76
+ return minus + d ;
66
77
67
- int newlen ;
68
-
69
- do
78
+ var result = "" ;
79
+ while ( d > 0 ) // Convert to desired
70
80
{
71
- var divide = 0 ;
72
- newlen = 0 ;
73
-
74
- for ( var i = 0 ; i < length ; i ++ )
75
- {
76
- divide = divide * @from + number [ i ] ;
77
-
78
- if ( divide >= to )
79
- {
80
- number [ newlen ++ ] = divide / to ;
81
- divide = divide % to ;
82
- }
83
- else if ( newlen > 0 )
84
- {
85
- number [ newlen ++ ] = 0 ;
86
- }
87
- }
88
-
89
- length = newlen ;
90
- result = chars [ divide ] + result ;
81
+ result = chars [ d % to ] + result ;
82
+ d /= to ;
91
83
}
92
- while ( newlen != 0 ) ;
93
-
94
- return result ;
84
+ return minus + result ;
95
85
}
96
86
97
87
public static string EncodeXml ( this string value )
0 commit comments