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

前段时间写的一个二进制打字程序,之所以弄这个主要是因为我的一个同学说过要是键盘上只有两个键(0或1),那编起程序来那该多累啊。后来我觉得好玩,就随便编了一个。

主要实现的效果:
用户利用数字键的'1'、'2'('1'对应二进制值'1','2'对应二进制值'0')输入7位二进制数字(不显示在屏幕上),输完后,程序将输出二进制对应的ASCII字符到屏幕上。退出时,请输入'1111110'即可。

下面我就具体分析一下我的源代码:

这段主要是判断程序过程中是否会出现异常
//中断
void my_assert(bool condition, char* info){
if(!condition){
cout << endl << info << endl;
exit(0);
}
}


//这段呢,是输出字符
void output(char ch){
cout << ch;
}


//判断是否完成标准二进制序列输入,即判断一个字符对应的二进制数字是否输入完全
bool checkEOC(char ch){
bool EOC = true;
if(ch == '~'){ //如果二进制值对应的字符为'~',则退出程序
EOC = false;
}
return EOC;
}


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

//获取字符,将二进制序列转换为字符
const int input_len = 7;
char my_getChar(void){
char ch;
double total = 0;
int len = input_len;
int i = 0;
while(i < input_len){
ch = getch();
if(ch == '2'){ch = '0';}
i++;
total += (ch-'0') * pow(2, len-1);
len--;
}
ch = char(int(total));
return ch;
}

主函数:

int main(void){

char ch;
for(;;){
ch = my_getChar();
my_assert(checkEOC(ch), "Exit to windows.");
output(ch);
}

//char2binary("E:\\courses\\test1.cpp","E:\\courses\\test2.txt");
return 0;
}


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

//将文本文件转换为二进制序列文件
void char2binary(char* url1, char* url2){
ifstream in;
ofstream out;
in.open(url1);
out.open(url2);
char ch;
int bin;
int len = 7;
int bs[7] = {0};
int r = 0;
while((ch = in.get()) != EOF){
bin = int(ch);
int bin2 = bin;
while(bin2 != 0){
r = bin2 % 2;
bin2 = bin2 / 2;
bs[len-1] = r;
len--;
}
len = 7;
for(int i = 0; i < len; i++){
out.put(char(bs[i]+48));
}
out.put('#');
}
in.close();
out.close();
}


好了,大家体验下用两个键进行二进制编程吧。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值