利用两个键进行二进制编程

  前段时间写的一个二进制打字程序,之所以弄这个主要是因为我的一个同学说过要是键盘上只有两个键(0或1),那编起程序来那该多累啊。后来我觉得好玩,就随便编了一个。 
主要实现的效果: 
     用户利用数字键的'1'、'2'('1'对应二进制值'1','2'对应二进制值'0')输入7位二进制数字(不显示在屏幕上),输完后,程序将输出二进制对应的ASCII字符到屏幕上。退出时,请输入'1111110'即可。 
下面我就具体分析一下我的源代码: 

1 这段主要是判断程序过程中是否会出现异常  
2 //中断
3 void my_assert(bool condition, char* info){
4 if(!condition){
5 cout << endl << info << endl;
6 exit(0);
7 }
8 }
1 //这段呢,是输出字符  
2 void output(char ch){
3 cout << ch;
4 }
1 //判断是否完成标准二进制序列输入,即判断一个字符对应的二进制数字是否输入完全  
2 bool checkEOC(char ch){
3 bool EOC = true;
4 if(ch == '~'){ //如果二进制值对应的字符为'~',则退出程序
5 EOC = false;
6 }
7 return EOC;
8 }

下面这段是程序的核心,思路就是连续获取用户的input_len个二进制值,然后利用二进制转十进制的原理将其转为十进制数,最后再强制转换为char型即可。很简单吧。 

 1 //获取字符,将二进制序列转换为字符  
2 const int input_len = 7;
3 char my_getChar(void){
4 char ch;
5 double total = 0;
6 int len = input_len;
7 int i = 0;
8 while(i < input_len){
9 ch = getch();
10 if(ch == '2'){ch = '0';}
11 i++;
12 total += (ch-'0') * pow(2, len-1);
13 len--;
14 }
15 ch = char(int(total));
16 return ch;
17 }

主函数:

 1 int main(void){  
2
3 char ch;
4 for(;;){
5 ch = my_getChar();
6 my_assert(checkEOC(ch), "Exit to windows.");
7 output(ch);
8 }
9
10 //char2binary("E:\\courses\\test1.cpp","E:\\courses\\test2.txt");
11 return 0;
12 }

为了方便如此另类的“二进制编程”,我还特意写了个函数,可以直接将写好的源代码文件转换为纯二进制的文件,二进制序列之间用'#'隔开。当然了,该程序不能直接导入这个“二进制文件”从而输出相应的字符型文件。只好拜托用户对应着一个一个输了。

 1 //将文本文件转换为二进制序列文件  
2 void char2binary(char* url1, char* url2){
3 ifstream in;
4 ofstream out;
5 in.open(url1);
6 out.open(url2);
7 char ch;
8 int bin;
9 int len = 7;
10 int bs[7] = {0};
11 int r = 0;
12 while((ch = in.get()) != EOF){
13 bin = int(ch);
14 int bin2 = bin;
15 while(bin2 != 0){
16 r = bin2 % 2;
17 bin2 = bin2 / 2;
18 bs[len-1] = r;
19 len--;
20 }
21 len = 7;
22 for(int i = 0; i < len; i++){
23 out.put(char(bs[i]+48));
24 }
25 out.put('#');
26 }
27 in.close();
28 out.close();
29 }

好了,大家体验下用两个键进行二进制编程吧。

posted @ 2012-03-30 15:30  bilipan  阅读(613)  评论(0编辑  收藏  举报