`
bilipan
  • 浏览: 11137 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

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

阅读更多
    前段时间写的一个二进制打字程序,之所以弄这个主要是因为我的一个同学说过要是键盘上只有两个键(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();
}


好了,大家体验下用两个键进行二进制编程吧。
1
0
分享到:
评论

相关推荐

    c语言编程题:从键盘输入一个十进制数,将其转换为二进制、八进制和十六进制数,并同时输出。

    - **二进制**:计算机内部处理数据时所使用的进制,基数为2,只使用0和1两个数字进行计数。 - **八进制**:基数为8,使用0~7八个数字进行计数。 - **十六进制**:基数为16,除了使用0~9十个数字外,还使用A~F六个...

    BES二进制文件编辑器

    - 使用比较功能,可以对比两个二进制文件的差异,这对于版本控制或找出文件损坏的部分非常有帮助。 7. **BES二进制文件编辑器的优势**: - 界面友好,操作简便,适合不同水平的用户。 - 功能全面,满足多种二...

    将二进制文件转换为16进制

    二进制是计算机的基础,它使用0和1两个数字来表示所有信息。而十六进制(Hexadecimal)是一种逢16进1的进位制,用0-9和A-F这16个符号来表示,方便人类理解和处理二进制数据。在编程中,二进制和十六进制之间转换非常...

    1.二进制字符串转十进制数值_labview_二进制转十进制_

    二进制(Binary)是一种基于2的数制系统,只使用0和1两个数字。而我们日常生活中使用的十进制(Decimal)则是基于10的数制系统,包含0到9十个数字。在二进制中,每一位的权重都是2的幂次,例如最右边的一位是2^0,第...

    二进制查看工具

    这样的工具不仅能够显示文件内容,还能对比两个二进制文件之间的差异,这对于软件开发、版本控制和数据完整性检查来说非常实用。 二进制查看工具的主要功能包括: 1. **字节级查看**:用户可以逐字节查看文件,每...

    矩阵二进制编码与矩阵定义值二进制编码的数码管显示.rar

    例如,如果矩阵按键有4行4列,那么每个按键可以由两个二进制位表示,例如第一行第一列的按键可以表示为00,第一行第二列的按键为01,以此类推。这种编码方式有助于简化程序逻辑,使得按键的处理更加高效。 “矩阵...

    二进制文件比对工具

    - 分别加载要比较的两个二进制文件到左右两个窗格。 - 工具会自动进行比较,并以颜色高亮显示不同之处。 - 用户可以通过滚动或点击特定区域查看详细差异。 - 可以使用内置的合并功能,手动或自动合并两份文件的...

    十进制转化成二进制数实现

    二进制系统则只有两个符号,即0和1,每个位置的权重是2的幂次。转换的核心在于将十进制数分解成2的幂次的和。 C++中将十进制转为二进制通常有两种主要方法:除2取余法和位运算法。 1. **除2取余法**: 这种方法...

    一个简单二进制与十进制的转换器

    二进制则是计算机的基础,仅包含0和1两个数字。每一位的权重是2的幂次,从右向左依次递增。例如,二进制数1011表示为1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 1 * 2^0,等于十进制的11。 二进制与十进制之间的转换可以分为两...

    二进制与十六进制互换_lucke67_labview_simplyicc_

    总结一下,"二进制与十六进制互换"是一个关于理解并实际操作二进制和十六进制转换的教程,利用LabVIEW这一强大的工具进行实践。通过对"二进制与十六进制互换.vi"的探索,用户不仅可以学习到二进制和十六进制的基本...

    二进制比较文件

    比较两个二进制文件意味着逐字节地检查它们的内容,找出任何不匹配的地方。 在VB中,我们可以使用内置的文件I/O功能来读取和比较二进制文件。"BinRead"函数是VB中用于读取二进制文件的关键工具。它允许程序员从文件...

    十六进制转二进制并显示

    在转换部分,程序使用`AND`、`SAR`等指令对数值进行位操作,将十六进制数拆分为两个二进制数(高位和低位),并将它们分别存储在`DATA2`和`DATA20`数组中。最后,通过`MOV`和`DL`的组合,程序准备将转换后的二进制数...

    EDA技术 实验报告8位二进制加法器设计

    本实验报告将详细介绍如何使用EDA技术设计一个8位二进制全加器,这是一种能够同时处理8个二进制位加法运算的逻辑电路。 ### 一、实验设计要求 实验的目标是基于一位二进制全加器构建8位并行二进制全加器。设计中需...

    二进制格雷码 与自然二进制码的互换

    对于自然二进制码,我们需要对每个二进制位进行异或操作,即每个位与其右边的位进行异或,这被称为模2加法。这种方法确保了每次只改变一位,从而生成了格雷码。 此外,源代码中还包括了十进制与二进制之间的转换。...

    十进制二进制转换

    1. **位权求和法**:每个二进制位上的数字乘以其对应的权重(2的幂次),然后将所有结果相加。 例如,将二进制数10010转换为十进制: (1 × 2^4) + (0 × 2^3) + (0 × 2^2) + (1 × 2^1) + (0 × 2^0) = 16 + 0 + ...

    二进制转换

    二进制(Binary)系统是基于2的幂次的计算体系,只包含两个数字:0和1,而十六进制(Hexadecimal)系统则是一种基于16的幂次的计算体系,用16个符号0-9和A-F来表示数值。了解这两种表示法的相互转换对于理解计算机...

    58-Vivado二进制与BCD码互转设计.7z

    设计者可能编写了两个主要模块:一个将二进制数转换为BCD码,另一个将BCD码转换回二进制数。这两个模块的核心算法可能包括位移、比较和选择等操作,以确保转换的正确性。 Vivado的仿真功能在设计过程中扮演了重要...

    将一个十六位二进制数转换为十六进制数并在屏幕输出

    这项实验不仅涉及到了数制之间的转换原理,还包含了如何利用汇编语言进行编程控制。 #### 汇编代码分析 1. **数据段(DATASEGMENT)** ```assembly DATASEGMENT BUFADW0001001000110100B;1234H BUFBDB4dup(?)...

    简单的十进制互转二进制程序

    每个二进制位都有对应的权重,从右向左,权重依次为2的0次幂、2的1次幂、2的2次幂...。将每个位上的二进制数乘以其对应的权重,然后将结果相加,即可得到十进制数。 例如,将二进制数1011转换为十进制: 1 × 2^3 +...

Global site tag (gtag.js) - Google Analytics