30.一个自定义32进制类初稿
三十二进制类,合法字符0-9,A-V,遇V进位。目前支持加法。
/Files/zerobug/Demisemiquaver.zip三十二进制类,合法字符0-9,A-V,遇V进位。目前支持加法。
----------------------------------------------------------------
1

/**//**************************************************************************2
* COPYRIGHT (C) 2007, SHANG GROUP. ALL RIGHTS RESERVED.3
* FILENAME : Demisemiquaver.cs4
* DESCRIPTION: 三十二进制类,可进行加法。5
* 1.合法的字符包括0-9,A-V;6
* 2.a-v字符会自动转为A-V;7
* AUTHOR : ZEROBUG8
* DATE : May 26, 20089
* VERSION : 0.110
* 11
* - MODIFIED HISTORY - 12
* 13
* 1.May 26, 2008 by Sun G.Q., 0.0 - 0.114
* - Created. 15
**************************************************************************/16

17
using System;18
using System.Collections.Generic;19
using System.Text;20

21
namespace Util22


{23

/**//// <summary>24
/// 自定义三十二进制,包括加法25
/// </summary>26
public class Demisemiquaver27

{28
private String _value;29

30
public Demisemiquaver()31

{32

33
}34
public Demisemiquaver(String v)35

{36
this.Value = v;37
}38
public String Value39

{40

get
{ return _value; }41
set 42

{43
if (CheckString(value.ToUpper()))44
_value = value.ToUpper();45
else46
throw (new ArgumentOutOfRangeException("Value", value, "Value must be assigned a string which includes the chars between '0-9' or 'A-V'."));47
}48
}49

50

三十二进制加法#region 三十二进制加法51

/**//// <summary>52
/// 三十二进制加法,自增153
/// </summary>54
/// <param name="oldValue"></param>55
/// <returns></returns>56
public static String Add(String oldValue)57

{58
return Add(oldValue, "1");59
}60

61

/**//// <summary>62
/// 三十二进制加法63
/// </summary>64
/// <param name="oldValue"></param>65
/// <param name="addValue"></param>66
/// <returns></returns>67
public static String Add(String oldValue, String addValue)68

{69
//检查字符合法性70
if (!CheckString(oldValue.ToUpper()))71
throw (new ArgumentOutOfRangeException("oldValue", oldValue, "Value must be assigned a string which includes the chars between '0-9' or 'A-V'."));72
if (!CheckString(addValue.ToUpper()))73
throw (new ArgumentOutOfRangeException("addValue", addValue, "Value must be assigned a string which includes the chars between '0-9' or 'A-V'."));74
75

76
Int32 len1 = oldValue.Length;77
Int32 len2 = addValue.Length;78
Int32 cr = 0;79
Int32 g = 0;80

81
String add = String.Empty;82

83
Char[] olds = oldValue.ToUpper().ToCharArray();84
Char[] adds = addValue.ToUpper().ToCharArray();85

86
//以长字符串为主87
if (len1 > len2)88

{89
//先与短字符串相加90
for (Int32 i = len2 - 1; i >= 0; i--)91

{92
g = AddChar(Convert32To10((Int32)olds[i + len1 - len2]), Convert32To10((Int32)adds[i]), cr, out cr);93
add = Convert10To32(g, true) + add;94
}95
//进位并把长字符串的高位连接上96
Int32 j = len1 - len2 - 1;97
while (j >= 0)98

{99
g = AddChar(Convert32To10((Int32)olds[j]), cr, out cr);100
add = Convert10To32(g, true) + add;101
j--;102
}103
}104
else if (len2 > len1)105

{106
for (Int32 i = len1 - 1; i >= 0; i--)107

{108
g = AddChar(Convert32To10((Int32)adds[i + len2 - len1]), Convert32To10((Int32)olds[i]), cr, out cr);109
add = Convert10To32(g, true) + add;110
}111
Int32 j = len2 - len1 - 1;112
while (j >= 0)113

{114
g = AddChar(Convert32To10((Int32)adds[j]), cr, out cr);115
add = Convert10To32(g, true) + add;116
j--;117
}118
}119
else if (len1 == len2)120

{121
for (Int32 i = len1 - 1; i >= 0; i--)122

{123
g = AddChar(Convert32To10((Int32)adds[i + len2 - len1]), Convert32To10((Int32)olds[i]), cr, out cr);124
add = Convert10To32(g, true) + add;125
}126
127
//g = AddChar(Convert32To10((Int32)adds[0]), cr, out cr);128
if (cr > 0)129
add = Convert10To32(cr, true) + add;130
131
}132

133
return add;134
}135
#endregion136

137

2,10进制转为32进制,合法字符包括'1-9','A-V'#region 2,10进制转为32进制,合法字符包括'1-9','A-V'138

/**//// <summary>139
/// 十进制转换为32进制:先转换为2进制, 再按照5位划分,转换为32进制140
/// </summary>141
/// <param name="Dec"></param>142
/// <returns></returns>143
public static String Convert10To32(Int32 Dec)144

{145
String dt2 = Convert.ToString(Dec, 2);146
String s32 = String.Empty;147

148

/**//////////////////////////////////////////////////////////////////////////149
//如果2进制的长度是5的整数倍时,直接按5位划分计算,150
//否则,先从高位(左起)取余数位,再按5位划分计算151

/**/////////////////////////////////////////////////////////////////////////152
Int32 iRest = dt2.Length % 5;153

154
if (iRest == 0)155

{156
for (Int32 i = 0; i < dt2.Length / 5; i++)157

{158
s32 = s32 + Convert10To32(Convert.ToInt32((dt2.Substring(i * 5, 5)), 2), true);159
}160
}161
else162

{163
s32 = s32 + Convert10To32(Convert.ToInt32((dt2.Substring(0, iRest)), 2), true);164

165
dt2 = dt2.Substring(iRest, dt2.Length - iRest);166

167
for (Int32 i = 0; i < dt2.Length / 5; i++)168

{169
s32 = s32 + Convert10To32(Convert.ToInt32((dt2.Substring(i * 5, 5)), 2), true);170
}171
}172
return s32;173
}174

175

/**//// <summary>176
/// 二进制转换为32进制:按照5位划分,转换为32进制177
/// </summary>178
/// <param name="Dec"></param>179
/// <returns></returns>180
public static String Convert2To32(String s2)181

{182
String dt2 = s2;183
String s32 = String.Empty;184

185

/**//////////////////////////////////////////////////////////////////////////186
//如果2进制的长度是5的整数倍时,直接按5位划分计算,187
//否则,先从高位(左起)取余数位,再按5位划分计算188

/**/////////////////////////////////////////////////////////////////////////189
Int32 iRest = dt2.Length % 5;190

191
if (iRest == 0)192

{193
for (Int32 i = 0; i < dt2.Length / 5; i++)194

{195
s32 = s32 + Convert10To32(Convert.ToInt32((dt2.Substring(i * 5, 5)), 2), true);196
}197
}198
else199

{200
s32 = s32 + Convert10To32(Convert.ToInt32((dt2.Substring(0, iRest)), 2), true);201

202
dt2 = dt2.Substring(iRest, dt2.Length - iRest);203

204
for (Int32 i = 0; i < dt2.Length / 5; i++)205

{206
s32 = s32 + Convert10To32(Convert.ToInt32((dt2.Substring(i * 5, 5)), 2), true);207
}208
}209
return s32;210
}211

212

/**//// <summary>213
/// 将小于32的10进制数,转换为32进制214
/// </summary>215
/// <param name="s10"></param>216
/// <returns></returns>217
public static String Convert10To32(Int32 dec, Boolean IsLessThan32)218

{219

220
String s = String.Empty;221
if (IsLessThan32)222

{223
String s10 = dec.ToString();224
if (s10.Length == 1)225

{226
s = s10;227

228
}229
else if (Convert.ToInt32(s10) < 32)230

{231
s = Convert.ToString((Char)(64 + (dec - 9)));232

233
}234
}235
return s;236
}237

238
#endregion239

240

检查合法性,合法字符包括‘0-9’,‘A-V'#region 检查合法性,合法字符包括‘0-9’,‘A-V'241

/**//// <summary>242
/// 检查字符是否合法,合法字符包括‘0-9’,‘A-V'243
/// </summary>244
/// <param name="c"></param>245
/// <returns></returns>246
public static Boolean CheckChar(Char c)247

{248
if ((Int32)c < 48 || ((Int32)c > 57 && (Int32)c < 65) || (Int32)c > 86)249
return false;250
else251
return true;252
}253

254

/**//// <summary>255
/// 检查字符串的组成字符是否合法,合法字符包括‘0-9’,‘A-V'256
/// </summary>257
/// <param name="s"></param>258
/// <returns></returns>259
public static Boolean CheckString(String s)260

{261
Boolean IsOK = true;262
Char[] cs = s.ToCharArray();263
for (Int32 i = 0; i < s.Length; i++)264

{265
if (!CheckChar(cs[i]))266

{267
IsOK = false;268
break;269
}270
}271
return IsOK;272
}273
#endregion274

275

字符相加#region 字符相加276

/**//// <summary>277
/// 把两个字符相加,并输出进位的字符278
/// </summary>279
/// <param name="c1"></param>280
/// <param name="c2"></param>281
/// <param name="cr"></param>282
/// <returns></returns>283
public static Int32 AddChar(Int32 c1, Int32 c2, out Int32 cr)284

{285

286
Int32 a = c1 + c2;287
if (a < 32)288

{289
cr = 0;290
return a;291
}292
else293

{294
cr = 1;295
return a-32;296
}297
}298

299

/**//// <summary>300
/// 把三个字符相加,并输出进位的字符cr301
/// </summary>302
/// <param name="c1"></param>303
/// <param name="c2"></param>304
/// <param name="c3"></param>305
/// <param name="cr">进位</param>306
/// <returns></returns>307
public static Int32 AddChar(Int32 c1, Int32 c2, Int32 c3, out Int32 cr)308

{309
//0-96310
Int32 a = c1 + c2 + c3;311
if (a < 32)312

{313
cr = 0;314
return a;315
}316
else if (a < 64)317

{318
cr = 1;319
return a - 32;320
}321
else322

{323
cr = 2;324
return a - 64;325
}326
}327
#endregion328

329

三十二进制转为10,2进制#region 三十二进制转为10,2进制330

/**//// <summary>331
/// 三十二进制的字符(值)转为10进制332
/// </summary>333
/// <param name="c"></param>334
/// <returns></returns>335
public static Int32 Convert32To10(Int32 c)336

{337

338
Int32 iSubtract = 0;339
if (c > 47 && c < 58)340

{341
iSubtract = (c - 48);342
}343
else if (c > 64 && c < 87)344

{345
iSubtract = (c - 64 + 9);346
}347
return iSubtract;348

349
}350

351

/**//// <summary>352
/// 三十二进制的字符串转为10进制,转之前要确认为有效的10进制353
/// </summary>354
/// <param name="s"></param>355
/// <returns></returns>356
public static Int32 Convert32To10(String s)357

{358

/**///////////////////////////////////////////359
Int32 ii = 0;360
return ii;361
}362

363

/**//// <summary>364
/// 三十二进制的字符串转为2进制,转之前要确认为有效的2进制365
/// </summary>366
/// <param name="s"></param>367
/// <returns></returns>368
public static String Convert32To2(String s)369

{370

/**///////////////////////////////////////////371
String ss = String.Empty;372
return ss;373
}374
#endregion375

376
}377

378
}379

_____________________________________________________________________________________
COPYRIGHT©2008,HTTP://ZEROBUG.CNBLOGS.COM .ALL RIGHTS RESERVED.
COPYRIGHT©2008,HTTP://ZEROBUG.CNBLOGS.COM .ALL RIGHTS RESERVED.
浙公网安备 33010602011771号