65.9K
CodeProject 正在变化。 阅读更多。
Home

数字转换器 – 移动化!

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2009年10月4日

CPOL

2分钟阅读

viewsIcon

10021

一个用于将数字从一种进制转换为另一种进制的移动应用程序。

背景

四年前,我用 C# 编写了两个方法,一个用于将十进制数转换为任何进制,另一个用于将任何进制数转换为十进制数。

这篇文章也发表在 CodeProject 上,标题为:十进制到任何进制及其反向转换,现在,我添加了一个额外的功能,用于将一个数字从任何进制转换为另一个进制。例如,使用这种方法,我们可以将二进制数转换为八进制数。相应地,UI 也进行了更改。

这个更新版本的数字转换器作为一个移动设备应用程序提供,目前配置为在 Windows Mobile 5.0 Pocket PC R2 设备和模拟器上运行。

引言

数字转换器允许您将任何进制的数字转换为另一种进制。DecimalToBase 方法将数字从十进制转换为用户输入的指定进制。另一个方法 BaseToDecimal 将数字从指定进制转换为相应的十进制等值。

以下方法实际上没有从以前的版本中修改,保持不变,用于将数字转换为用户输入的任何进制。

string DecimalToBase(int iDec, int numbase)
{
    string strBin = "";
    int[] result = new int[32];
    int MaxBit = 32;
    for (; iDec > 0; iDec /= numbase)
    {
        int rem = iDec % numbase;
        result[--MaxBit] = rem;
    }
    for (int i = 0; i < result.Length; i++)
        if ((int)result.GetValue(i) >= base10)
            strBin += cHexa[(int)result.GetValue(i) % base10];
        else
            strBin += result.GetValue(i);
    strBin = strBin.TrimStart(new char[] { '0' });
    return strBin;
}

BaseToDecimal 方法被修改了,因为之前对十六进制输入进行了不必要的检查。

int BaseToDecimal(string sBase, int numbase)
{
    int dec = 0;
    int b;
    int iProduct = 1;
    string sHexa = "";
    if (sBase.IndexOfAny(cHexa) >= 0)
        for (int i = 0; i < cHexa.Length; i++)
            sHexa += cHexa.GetValue(i).ToString();
    for (int i = sBase.Length - 1; i >= 0; i--, iProduct *= numbase)
    {
        string sValue = sBase[i].ToString();
        if (sValue.IndexOfAny(cHexa) >= 0)
            b = iHexaNumeric[sHexa.IndexOf(sBase[i])];
        else
            b = (int)sBase[i] - asciiDiff;
        dec += (b * iProduct);
    }
    return dec;
}

这两个方法根据用户输入被激活,并通过按下“转换”的左软键来调用。

if (comboBox1.SelectedItem.ToString() != "10" && comboBox2.SelectedItem.ToString() != "10")
{
    String temp = BaseToDecimal(textBox1.Text, Int32.Parse(comboBox1.Text)).ToString();
    textBox3.Text = DecimalToBase(Int32.Parse(temp), Int32.Parse(comboBox2.Text));
}
else if (comboBox2.SelectedItem.ToString() == "10")
    textBox3.Text = BaseToDecimal(textBox1.Text, Int32.Parse(comboBox1.Text)).ToString();
else if (comboBox1.SelectedItem.ToString() == "10")
    textBox3.Text = DecimalToBase(Int32.Parse(textBox1.Text), Int32.Parse(comboBox2.Text));

以下是一些示例输出

将十进制数转换为二进制数

NumericConverter/converter1.jpg

将十进制数转换为八进制数

NumericConverter/converter2.jpg

将二进制数转换为十进制数

NumericConverter/converter4.jpg

将八进制数转换为二进制数

NumericConverter/converter5.jpg

结论

这个数字转换器易于安装在您的 Pocket PC 上,可以通过文章顶部的链接下载。该应用程序的部署可以通过 Visual Studio 2008 完成,或者您可以使用 Windows Mobile Device Center 手动传输文件。

© . All rights reserved.