/// <summary>
/// 从M进制转换为N进制
/// </summary>
internal class MBase2NBase
{
/// <summary>
/// M进制值字符串
/// </summary>
private string MValue = ""; /// <summary>
/// 除法商
/// </summary>
private string Quotient = null; /// <summary>
/// M进制
/// </summary>
private int M = ; /// <summary>
/// N进制
/// </summary>
private int N = ; /// <summary>
/// .ctor
/// </summary>
public MBase2NBase()
{ } /// <summary>
/// .ctor
/// </summary>
/// <param name="mValue">M进制值字符串</param>
/// <param name="m">M进制(如10).参数值在2~36的范围内</param>
/// <param name="n">N进制(如8),则意味着从10进制转换成8进制.参数值在2~36的范围内</param>
public MBase2NBase(string mValue, int m, int n)
{
this.M = m;
this.N = n;
this.MValue = mValue;
} /// <summary>
/// 开始转换
/// </summary>
/// <param name="mValue">M进制值字符串</param>
/// <param name="m">M进制(如10).参数值在2~36的范围内</param>
/// <param name="n">N进制(如8),则意味着从10进制转换成8进制.参数值在2~36的范围内</param>
/// <returns>N进制字符串</returns>
public string Transform(string mValue, int m, int n)
{
this.M = m;
this.N = n;
this.MValue = mValue;
return Transform();
} /// <summary>
/// M进制值字符串
/// </summary>
/// <returns>N进制字符串</returns>
public string Transform()
{
if (M < || M > )
{
throw new ArgumentOutOfRangeException("参数值不在2~36的范围内");
} if (N < || N > )
{
throw new ArgumentOutOfRangeException("参数值不在2~36的范围内");
} if (M == N)
{
return MValue;
} String nValue = "";
Quotient = MValue;
while (Quotient.Length > )
{
nValue = Remainder(Quotient) + nValue;
}
return nValue;
} /// <summary>
/// 对给定的M进制字符串对n求余
/// </summary>
/// <param name="mTempValue"></param>
/// <returns></returns>
private String Remainder(String mTempValue)
{
Quotient = "";
int temp = ;
while (mTempValue.Length > )
{
int t = GetIntFromStringFirstChar(mTempValue.Substring(, ));
mTempValue = mTempValue.Substring();
temp = temp*M + t;
Quotient += GetStrFromInt(temp / N);
temp = temp%N;
}
while (Quotient.Length > && Quotient[] == '')
{
Quotient = Quotient.Substring();
}
return GetStrFromInt(temp);
} /// <summary>
/// 字符串转换成Int
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
private int GetIntFromStringFirstChar(String str)
{
return str[] <= '' && str[] >= '' ? str[] - '' : str[] - 'a' + ;
} /// <summary>
/// Int转换为相应进制的字符
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
private String GetStrFromInt(int value)
{
String result = null;
if (value >= && value <= )
result = ((char) ('' + value)).ToString();
else if (value > && value < )
{
result = ((char) ('a' + value - )).ToString();
}
else
{
throw new Exception("未知错误");
} return result;
}
}

从M进制转换为N进制的更多相关文章

  1. 16进制字符串和byte数组进行相互转换\将10进制转换为任意进制

    16进制字符串和byte数组进行相互转换 简介 1个byte对应8个bit,16进制使用4个bit,所以一个byte转成16进制,占用两位. JAVA代码 private static final c ...

  2. C语言:十进制进制转换为其他进制(思想:查表法)

    // //  main.c //  Hex conversion // //  Created by ma c on 15/7/22. //  Copyright (c) 2015年 bjsxt. A ...

  3. 十进制和n进制的转换(10进制转换为36进制)

    答案如下: void Convert() { map<int ,string> maps; maps[0]="0"; maps[1]="1"; ma ...

  4. lua之m进制转换为n进制-任意进制转换算法

    够无聊的写这个,为防止需要的人也无聊一遍,写个吧 算法有n种,但是,咱们一种就够用了 --数组倒序排列 local function orderByDesc( input ) local output ...

  5. delphi 中字符串与16进制、10进制转换函数

      //字符串转成16进制代码function strToHexStr(str:string):string;varc:char;ss:string;i:integer;beginwhile str& ...

  6. 16进制字符串转换为3进制(扩展至K进制)

    [本文链接] http://www.cnblogs.com/hellogiser/p/16-to-3-or-k.html [题目] 写代码把16进制表示的串转换为3进制表示的串.例如x=”5”,则返回 ...

  7. C语言:其他进制转换为十进制(方法二)

    #include<stdio.h> #include<math.h> #include<string.h> #include<ctype.h> //其他 ...

  8. java中把字节数组转换为16进制字符串

    把字符串数组转换为16进制字符串 import java.security.MessageDigest; public class StringUtil { public StringUtil() { ...

  9. MFC 编辑框输入16进制字符串转换为16进制数或者10进制数据计算

    1.编辑框添加变量,并选择变量类型为CString. 2.  使用“_tcstoul”函数将Cstring 类型转换为16进制/10进制数进行计算.

随机推荐

  1. springmvc 中异常处理

    springmvc 中异常处理常见三种处理方式: 1:SimpleMappingExceptionResolver处理的是处理器方法里面出现的异常 2 3.自定义异常处理器:处理的是处理器方法里面出现 ...

  2. Linux_oracle命令大全(转)

    Linux_oracle命令大全 一,启动 1.#su - oracle              切换到oracle用户且切换到它的环境 2.$lsnrctl status           查看 ...

  3. 第2章 netty介绍与相关基础知识

    NIO有一个零拷贝的特性.Java的内存有分为堆和栈,以及还有字符串常量池等等.如果有一些数据需要从IO里面读取并且放到堆里面,中间其实会经过一些缓冲区.我们要去读,它会分成两个步骤,第一块它会把我们 ...

  4. css中字间距调整(转)

    css中字间距调整 (2014-01-02 13:51:07) 标签: 汉字 英文 间距 letter-spacing word-spacing 杂谈 分类: 网页制作 汉字间字间距设置:letter ...

  5. [转]SQL 模糊查询

      在进行数据库查询时,有完整查询和模糊查询之分. 一般模糊查询语句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式: 1,% :表 ...

  6. HDOJ 1121 Complete the Sequence

    [题目大意]有一个数列P,它的第i项是当x=i时,一个关于x的整式的值.给出数列的前S项,你需要输出它的第S+1项到第S+C项,并且使整式的次数最低.多测. [数据范围]数据组数≤5000,S+C≤1 ...

  7. PCL—点云分割(基于形态学) 低层次点云处理

    博客转载自:http://www.cnblogs.com/ironstark/p/5017428.html 1.航空测量与点云的形态学 航空测量是对地形地貌进行测量的一种高效手段.生成地形三维形貌一直 ...

  8. java中的全局变量与静态变量的区别与联系?有时候为什么专门定义静态变量。(标题党~~)

    static代表“每个类一个”而不是“每个对象一个”.即静态变量是类的所有对象共有的. 1 static JFrame f; static MyDrawPanel ml; 整个应用程序如下: 定义在p ...

  9. WebGoat系列实验Injection Flaws

    WebGoat系列实验Injection Flaws Numeric SQL Injection 下列表单允许用户查看天气信息,尝试注入SQL语句显示所有天气信息. 选择一个位置的天气,如Columb ...

  10. C# 顺序表---增删改查--逆至--删除最小值

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...