烦人的《计算机组成原理》课程设计终于弄完了!中途有一些过程是需要二进制与十六进制相互转换的,而且数据量还超多。我看到有同学用Windows自带的计算器一条一条的转换,甚是麻烦。于是就决定写了这个批量互转的东东。

主要的思想是,用map,把二进制串作key,对应十六进制字符作value,关联起来。比如在二进制转换十六进制的时候,就寻找这个Key,替换成这个value就实现转换了。

之所以要这么做,就是因为格式所需(位数不够高位需填0)。我也试过,把字串转换数字之后再处理,再用格式控制符, 比如%X是十六进制,来处理的,但是遇到十六进制转二进制就不知道怎么办了(无法满足格式要求)。

源码和exe都打包了,需要下载的同学,请点文章末尾的链接。由于是临时应急,所以错误处理不太好,需要输入数据是合法的才行!

下面把主要代码贴一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
void CBHTransDlg::Trans(CString strFrom, CString& strTo, int nHex)
{
	strFrom.Remove(' ');//去除空格
	strFrom.MakeUpper();//忽略大小写
 
	int nPos = 0;
	int nLength = strFrom.GetLength();
	CString strTmp;
	TCHAR chCur;
	int nCnt = 0;
 
	do
	{
		chCur = strFrom.GetAt(nPos ++);
 
		//if((chCur >= '0' && chCur <= '9') || (chCur >= 'A' && chCur <= 'Z'))
		if(chCur != '\n' && chCur != '\r')
		{
			strTmp += chCur;
			nCnt ++;
 
			if(nHex == 2 && nCnt == 4)
			{
				m_map.Lookup(strTmp, chCur);
				strTo += chCur;
				strTmp.Empty();
				nCnt = 0;
			}
			else if(nHex == 16)
			{
				POSITION pos = m_map.GetStartPosition();
				while(pos)
				{
					char chTmp;
					m_map.GetNextAssoc(pos, strTmp, chTmp);
 
					if(chCur == chTmp)
					{
						strTo += strTmp;
						break;
					}
 
				}//while
			}// if进制判断
 
		}
		else//在目的字串加上相应的回车
		{
			strTo += _T("\r\n");//\r换行和回车\n要一块儿加才能达到效果
			nPos ++;
		}
 
	}
	while(nPos < nLength);
 
	//拷贝到剪贴板
	Copy2Clipboard(strTo);
	m_StatusBar.SetText(_T("结果已拷贝至剪贴板!"), 0, 0);
}

 

 

附件下载:

2-16进制互相批量转换.rar