| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1136 人关注过本帖
标题:[转载]C#中的进制转换问题
只看楼主 加入收藏
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
结帖率:66.67%
收藏
 问题点数:0 回复次数:3 
[转载]C#中的进制转换问题
前一阶段,遇到了一个将int型数字转换成2进制显示的问题。如:8 -> 1000要求输入8就出现结果1000;输入13就出现1101。

以前没有遇到过此类问题,初一接触,第一反应就是C#必有解决此问题的方法可以直接调用。

本以为在Convert.的方法里可以直接ToBinary或是类似的处理,但经查找无此方法,于是想也许有其他方法重载了或派生了解决此问题的方法。

经查找,果然在ToString()的系列方法中有解决此问题的重载。
具体应用如:int a=13; Convert.ToString(a,2); 其中的2指转换成的基本类型是2进制类型。这样转换后就得到了1101的字符串。
同理还可以进行其他的多种进制转化。

网上搜了一下,相关的进制转换大概有以下方法(没有全部验证过):

///<summary>
///不同进制的数字之间的转换方法。
///int.Parse\Convert.ToString\BitConverter.ToString
///</summary>

//十六进制(string)转化为十进制(int)
int i = 0xA1 ;//ASCII码A1转化为对应值 可以:string thevalue = (char) 0xA1 ;

//十进制(int)转化为十六进制(string)
int a = 188;
TextBox1.Text=a.ToString("X4") ;

//十六进制(string)转化为十进制(int)
int b = int.Parse("AB", System.Globalization.NumberStyles.HexNumber);

//十进制(int)转化为十六进制(string)
j = 10;
string strBase16 = Convert.ToString(j,16);

//十六进制(string)转化为十进制(int)
string strBase16 = "A";
int j = Convert.ToInt32(strBase16,16);

//二进制(string)转化为十进制(int)
string bin = "1110" ;
int dec= Convert.ToInt16( bin , 2 ) ;
dec.ToString ( ) ;

//十进制(int)转化为二进制(string)
int j = 10;
string strBase2 = Convert.ToString(j,2);
DataAccess.common.setMessage( strBase2 ) ;

//十进制(int)转化为二进制(string)
int dec= 14 ;
sting bin = ConvertToBin ( dec ) ;// dec/2 = "1110"

//BitConverter转化
bytes = System.Text.Encoding.Default.GetBytes( "12Paladin2" ) ;
MessageBox.Show ( BitConverter.ToString( bytes ) ) ; // 31-32-50-61-6C-61-64-69-6E-32

//字节(byte)转化为十六进制(string)
Convert.ToString ( bytes[0+1] , 16 ) ;

//&Hff转化为如255的存放在byte中
byte.Parse ( Convert.ToInt32( '\xff' )).ToString( ) ) ;

//byte中bit操作
int[] hello = new int[1];
hello[0] = 1;
System.Collections.BitArray kao = new BitArray(hello);
bool **** = kao[0];

[此贴子已经被作者于2006-3-12 13:36:14编辑过]

搜索更多相关主题的帖子: 进制 
2006-03-12 13:36
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
[转载]c#中int 转string 16进制和16转double的方法
0x开头的16进制没有负数和小数

#region change hex to double

private Double HexConverToDouble(string hexString)

{

if (hexString == "")

{

return 0;

}

string data;

if (hexString.StartsWith("0x"))

{

data = hexString.Substring(2);

}

else

{

data = hexString;

}

char[] eachData = data.ToCharArray();

Double result = 0;

for (int i = 0; i < eachData.Length; i++)

{


char charValue = eachData[i];//eachData[m];

Double x = 16;//如果是八进制则写成8就可以

Double y = System.Convert.ToDouble(eachData.Length - i - 1);

switch (charValue)

{

case ''0'':

break;

case ''1'':

result += 1 * Math.Pow(x,y);

break;

case ''2'':

result += 2 * Math.Pow(x,y);

break;

case ''3'':

result += 3 * Math.Pow(x,y);

break;

case ''4'':

result += 4 * Math.Pow(x,y);

break;

case ''5'':

result += 5 * Math.Pow(x,y);

break;

case ''6'':

result += 6 * Math.Pow(x,y);

break;

case ''7'':

result += 7 * Math.Pow(x,y);

break;

case ''8'':

result += 8 * Math.Pow(x,y);

break;

case ''9'':

result += 9 * Math.Pow(x,y);

break;

case ''A'':

result += 10 * Math.Pow(x,y);

break;

case ''B'':

result += 11 * Math.Pow(x,y);

break;

case ''C'':

result += 12 * Math.Pow(x,y);

break;

case ''D'':

result += 13 * Math.Pow(x,y);

break;

case ''E'':

result += 14 * Math.Pow(x,y);

break;

case ''F'':

result += 15 * Math.Pow(x,y);

break;

case ''a'':

result += 10 * Math.Pow(x,y);

break;

case ''b'':

result += 11 * Math.Pow(x,y);

break;

case ''c'':

result += 12 * Math.Pow(x,y);

break;

case ''d'':

result += 13 * Math.Pow(x,y);

break;

case ''e'':

result += 14 * Math.Pow(x,y);

break;

case ''f'':

result += 15 * Math.Pow(x,y);

break;

default :

break;

}


}

return result;

}

#region convert the int32 to hex(string) //这个方法通用性不好,只能是int的转string的16进制

private string specInttoString(int source)//被主要方法调用的一个辅助方法

{

if(source <10)

{

return source.ToString();

}

else

{

switch(source)

{

case 10:

return "A";

case 11:

return "B";

case 12:

return "C";

case 13:

return "D";

case 14:

return "E";

case 15:

return "F";

default:

return "";

}

}


}

private string INTtoHEx(int source)//主要方法

{

if(source <10)

{

return "0x" + source.ToString();

}

else if (source <=15)

{

return "0x" + specInttoString(source);

}



else

{

int raiseNum = 16;

int addNum = 16;

int positionNum = 1;

while((source - addNum) >= 0)

{

positionNum++;

addNum = addNum * raiseNum;

}

int[] valuePositionNum = new int[positionNum];

for(int i = 0;i

{

valuePositionNum[i] = 0;

}

int[] valueAddNum = new int[positionNum];

for(int i = 0;i

{

valueAddNum[i] = Convert.ToInt32( Math.Pow(raiseNum,i));

}

int[] decreaseSource = new int[positionNum];

decreaseSource[positionNum -1] = source;

for(int i = positionNum -1;i>=0;i--)

{

while((decreaseSource[i] - valueAddNum[i] ) >=0)

{

if(i != 0)

decreaseSource[i -1] = decreaseSource[i] - valueAddNum[i] ;

valuePositionNum[i]++;

valueAddNum[i]= valueAddNum[i] +Convert.ToInt32( Math.Pow(raiseNum,i));

}

}

string[] stringValuePositionNum = new string[positionNum];

for(int i = 0;i

{

stringValuePositionNum[i] = specInttoString(valuePositionNum[i]);

}

string result = "0x";

for(int i = positionNum -1;i>=0;i--)

{

result = result + stringValuePositionNum[i];

}

return result;

// string[] hexList = new string[positionNum + 1];

// hexList[positionNum] = specInttoString(positionNum);

}

}

#endregion

#endregion


[此贴子已经被作者于2006-3-12 13:37:43编辑过]

2006-03-12 13:37
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
我工作中遇到的简单却有一时之间找不到的问题,给被 进制转换 搞昏过的人使用。
2006-03-12 13:43
goodrenze
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-8-22
收藏
得分:0 
正在解决进制问题呢,没想到让我搜到了,呵呵,感谢LZ分享经验!
2008-09-21 21:29
快速回复:[转载]C#中的进制转换问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017219 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved