Esempio n. 1
0
 /// <summary>
 /// 对给定的基数和字符串进行检查。
 /// </summary>
 /// <param name="value">包含要转换的数字的字符串,
 /// 使用不区分大小写的字母表示大于 <c>10</c> 的数。</param>
 /// <param name="fromBase"><paramref name="value"/> 中数字的基数,
 /// 它必须位于 <c>2</c> 到 <c>36</c> 之间。</param>
 /// <exception cref="System.ArgumentOutOfRangeException">
 /// <paramref name="fromBase"/> 不是 <c>2</c> 到 <c>36</c> 之间的数字。</exception>
 /// <exception cref="System.FormatException">
 /// <paramref name="value"/> 表示一个非 <c>10</c> 为基的有符号数,
 /// 但前面带一个负号。</exception>
 private static void CheckBaseConvert(string value, int fromBase)
 {
     // 基数检查。
     if (fromBase < 3 || fromBase > 36)
     {
         throw ExceptionHelper.InvalidBase("toBase");
     }
     if (value.Length == 0)
     {
         throw ExceptionHelper.NoParsibleDigits();
     }
     // 负号检查。
     if (value[0] == '-')
     {
         throw ExceptionHelper.BaseConvertNegativeValue();
     }
 }
Esempio n. 2
0
        /// <summary>
        /// 将 <c>64</c> 位无符号整数的值转换为其指定基的等效字符串表示形式。
        /// </summary>
        /// <param name="buffer">字符串的缓冲区。</param>
        /// <param name="value">要转换的 <c>64</c> 位无符号整数。</param>
        /// <param name="toBase">返回值的基数,必须位于 <c>2</c> 到 <c>36</c> 之间。</param>
        /// <returns>转换后字符串的起始索引。</returns>
        /// <exception cref="System.ArgumentException">
        /// <paramref name="toBase"/> 不是 <c>2</c> 到 <c>36</c> 之间的数字。</exception>
        private static int ConvertBase(char[] buffer, ulong value, int toBase)
        {
            if (toBase < 2 || toBase > 36)
            {
                throw ExceptionHelper.InvalidBase("toBase");
            }
            // 从后向前转换,不必反转字符串。
            ulong ulBase = (ulong)toBase;
            int   idx    = buffer.Length - 1;

            do
            {
                ulong quot = value / ulBase;
                buffer[idx--] = CharExt.BaseDigits[value - quot * ulBase];
                value         = quot;
            } while (value > 0);
            return(idx + 1);
        }