C# 进制之间的转换.docx
《C# 进制之间的转换.docx》由会员分享,可在线阅读,更多相关《C# 进制之间的转换.docx(20页珍藏版)》请在冰豆网上搜索。
![C# 进制之间的转换.docx](https://file1.bdocx.com/fileroot1/2022-12/1/fa8aa427-42e2-415d-97bb-6f08850af8d5/fa8aa427-42e2-415d-97bb-6f08850af8d51.gif)
C#进制之间的转换
C#进制之间的转换
1///<summary>
2///十进制转换为二进制
3///</summary>
4///<paramname="x"></param>
5///<returns></returns>
6publicstaticstringDecToBin(stringx)
7{
8stringz=null;
9intX=Convert.ToInt32(x);
10inti=0;
11longa,b=0;
12while(X>0)
13{
14a=X%2;
15X=X/2;
16b=b+a*Pow(10,i);
17i++;
18}
19z=Convert.ToString(b);
20returnz;
21}
22
23///<summary>
24///16进制转ASCII码
25///</summary>
26///<paramname="hexString"></param>
27///<returns></returns>
28publicstaticstringHexToAscii(stringhexString)
29{
30StringBuildersb=newStringBuilder();
31for(inti=0;i<=hexString.Length-2;i+=2)
32{
33sb.Append(
34Convert.ToString(
35Convert.ToChar(Int32.Parse(hexString.Substring(i,2),
36System.Globalization.NumberStyles.HexNumber))));
37}
38returnsb.ToString();
39}
40
41///<summary>
42///十进制转换为八进制
43///</summary>
44///<paramname="x"></param>
45///<returns></returns>
46publicstaticstringDecToOtc(stringx)
47{
48stringz=null;
49intX=Convert.ToInt32(x);
50inti=0;
51longa,b=0;
52while(X>0)
53{
54a=X%8;
55X=X/8;
56b=b+a*Pow(10,i);
57i++;
58}
59z=Convert.ToString(b);
60returnz;
61}
62
63///<summary>
64///十进制转换为十六进制
65///</summary>
66///<paramname="x"></param>
67///<returns></returns>
68publicstaticstringDecToHex(stringx)
69{
70if(string.IsNullOrEmpty(x))
71{
72return"0";
73}
74stringz=null;
75intX=Convert.ToInt32(x);
76Stacka=newStack();
77inti=0;
78while(X>0)
79{
80a.Push(Convert.ToString(X%16));
81X=X/16;
82i++;
83}
84while(a.Count!
=0)
85z+=ToHex(Convert.ToString(a.Pop()));
86if(string.IsNullOrEmpty(z))
87{
88z="0";
89}
90returnz;
91}
92
93///<summary>
94///二进制转换为十进制
95///</summary>
96///<paramname="x"></param>
97///<returns></returns>
98publicstaticstringBinToDec(stringx)
99{
100stringz=null;
101intX=Convert.ToInt32(x);
102inti=0;
103longa,b=0;
104while(X>0)
105{
106a=X%10;
107X=X/10;
108b=b+a*Pow(2,i);
109i++;
110}
111z=Convert.ToString(b);
112returnz;
113}
114
115///<summary>
116///二进制转换为十进制,定长转换
117///</summary>
118///<paramname="x"></param>
119///<paramname="iLength"></param>
120///<returns></returns>
121publicstaticstringBinToDec(stringx,shortiLength)
122{
123StringBuildersb=newStringBuilder();
124intiCount=0;
125
126iCount=x.Length/iLength;
127
128if(x.Length%iLength>0)
129{
130iCount+=1;
131}
132
133intX=0;
134
135for(inti=0;i<iCount;i++)
136{
137if((i+1)*iLength>x.Length)
138{
139X=Convert.ToInt32(x.Substring(i*iLength,(x.Length-iLength)));
140}
141else
142{
143X=Convert.ToInt32(x.Substring(i*iLength,iLength));
144}
145intj=0;
146longa,b=0;
147while(X>0)
148{
149a=X%10;
150X=X/10;
151b=b+a*Pow(2,j);
152j++;
153}
154sb.AppendFormat("{0:
D2}",b);
155}
156returnsb.ToString();
157}
158
159///<summary>
160///二进制转换为十六进制,定长转换
161///</summary>
162///<paramname="x"></param>
163///<paramname="iLength"></param>
164///<returns></returns>
165publicstaticstringBinToHex(stringx,shortiLength)
166{
167StringBuildersb=newStringBuilder();
168intiCount=0;
169
170iCount=x.Length/iLength;
171
172if(x.Length%iLength>0)
173{
174iCount+=1;
175}
176
177intX=0;
178
179for(inti=0;i<iCount;i++)
180{
181if((i+1)*iLength>x.Length)
182{
183X=Convert.ToInt32(x.Substring(i*iLength,(x.Length-iLength)));
184}
185else
186{
187X=Convert.ToInt32(x.Substring(i*iLength,iLength));
188}
189intj=0;
190longa,b=0;
191while(X>0)
192{
193a=X%10;
194X=X/10;
195b=b+a*Pow(2,j);
196j++;
197}
198//前补0
199sb.Append(DecToHex(b.ToString()));
200}
201returnsb.ToString();
202}
203
204///<summary>
205///八进制转换为十进制
206///</summary>
207///<paramname="x"></param>
208///<returns></returns>
209publicstaticstringOctToDec(stringx)
210{
211stringz=null;
212intX=Convert.ToInt32(x);
213inti=0;
214longa,b=0;
215while(X>0)
216{
217a=X%10;
218X=X/10;
219b=b+a*Pow(8,i);
220i++;
221}
222z=Convert.ToString(b);
223returnz;
224}
225
226
227///<summary>
228///十六进制转换为十进制
229///</summary>
230///<paramname="x"></param>
231///<returns></returns>
232publicstaticstringHexToDec(stringx)
233{
234if(string.IsNullOrEmpty(x))
235{
236return"0";
237}
238stringz=null;
239Stacka=newStack();
240inti=0,j=0,l=x.Length;
241longTong=0;
242while(i<l)
243{
244a.Push(ToDec(Convert.ToString(x[i])));
245i++;
246}
247while(a.Count!
=0)
248{
249Tong=Tong+Convert.ToInt64(a.Pop())*Pow(16,j);
250j++;
251}
252z=Convert.ToString(Tong);
253returnz;
254}
255
256#endregion//Helperfunctions
257
258///<summary>
259///
260///</summary>
261///<paramname="x"></param>
262///<paramname="y"></param>
263///<returns></returns>
264privatestaticlongPow(longx,longy)
265{
266inti=1;
267longX=x;
268if(y==0)
269return1;
270while(i<y)
271{
272x=x*X;
273i++;
274}
275returnx;
276}
277
278///<summary>
279///
280///</summary>
281///<paramname="x"></param>
282///<returns></returns>
283privatestaticstringToDec(stringx)
284{
285switch(x)
286{
287case"A":
288return"10";
289case"B":
290return"11";
291case"C":
292return"12";
293case"D":
294return"13";
295case"E":
296return"14";
297case"F":
298return"15";
299default:
300returnx;
301}
302}
303
304///<summary>
305///
306///</summary>
307///<paramname="x"></param>
308///<returns></returns>
309privatestaticstringToHex(stringx)
310{
311switch(x)
312{
313case"10":
314return"A";
315case"11":
316return"B";
317case"12":
318return"C";
319case"13":
320return"D";
321case"14":
322return"E";
323case"15":
324return"F";
325default:
326returnx;
327}
328}
329
330///<summary>
331///将16进制BYTE数组转换成16进制字符串
332///</summary>
333///<paramname="bytes"></param>
334///<returns></returns>
335publicstaticstringToHexString(byte[]bytes)//0xae00cf=>"AE00CF"
336{
337stringhexString=string.Empty;
338if(bytes!
=null)
339{
340StringBuilderstrB=newStringBuilder();
341
342for(inti=0;i<bytes.Length;i++)
343{
344strB.Append(bytes[i].ToString("X2"));
345}
346hexString=strB.ToString();
347}
348returnhexString;
349}
1///<summary>
2///
3///</summary>
4///<paramname="bytes"></param>
5///<paramname="iLength"></param>
6///<returns></returns>
7publicstaticstringToHexString(byte[]bytes,intiLength)//0xae00cf=>"AE00CF"
8{
9stringhexString=string.Empty;
10if(bytes!
=null)
11{
12StringBuilderstrB=newStringBuilder();
13
14if(bytes.Length<iLength)
15{
16iLength=bytes.Length;
17}
18
19for(inti=0;i<iLength;i++)
20{
21strB.Append(bytes[i].ToString("X2"));
22}
23hexString=strB.ToString();
24}
25returnhexString;
26}
27
28///<summary>
29///将byte数组转换为16进制字符串
30///</summary>
31///<paramname="bytes">要转换的数组</param>
32///<paramname="iStart">数组下标</param>
33///<paramname="iLength">长度</param>
34///<returns></returns>
35publicstaticstringToHexString(byte[]bytes,intiStart,intiLength)//0xae00cf=>"AE00CF"
36{
37stringhexString=string.Empty;
38if(bytes!
=null)
39{
40StringBuilderstrB=newStringBuilder();
41
42//缓冲区长度问题,需清空缓冲区
43if(bytes.Length<(iLength+iStart))
44{
45iLength=bytes.Length;
46}
47
48for(inti=iStart;i<iLength+iStart;i++)
49{
50strB.Append(bytes[i].ToString("X2"));
51}
52hexString=strB.ToString();
53}
54returnhexString;
55}
56
57///<summary>
58///
59///</summary>
60///<paramname="hexString"></param>
61///<paramname="discarded"></param>
62///<returns></returns>
63publicstaticbyte[]GetBytes(stringhexString,outintdiscarded)
64{
65discarded=0;
66stringnewString="";
67charc;
68//removeallnoneA-F,0-9,characters
69for(inti=0;i<hexString.Length;i++)
70{
71c=hexString[i];
72if(Uri.IsHexDigit(c))
73newString+=c;
74else
75discarded++;
76}
77//ifoddnumberofcharacters,discardlastcharacter
78if(newString.Length%2!
=0)
79{
80discarded++;
81newString=newString.Substring(0,newString.Length-1);
82}
83
84returnHexToByte(newString);
85}
86
87///<summary>
88///Convertsfrombinarycodeddecimaltointeger
89///</summary>
90///<paramname="num"></param&