C++如何实现BCD码和ASCII码的相互转换

所属分类: 软件编程 / C 语言 阅读数: 99
收藏 0 赞 0 分享

BCD 

即BCD代码。Binary-Coded Decimal‎,简称BCD,称BCD码或二-十进制代码,亦称二进码十进数。是一种二进制的数字编码形式,用二进制编码的十进制代码。这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。这种编码技巧,最常用于会计系统的设计里,因为会计制度经常需要对很长的数字串作准确的计算。相对于一般的浮点式记数法,采用BCD码,既可保存数值的精确度,又可免却使电脑作浮点运算时所耗费的时间。此外,对于其他需要高精确度的计算,BCD编码亦很常用。

ASCII

ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。

下面通过代码给大家介绍下C++如何实现BCD码和ASCII码的相互转换,具体代码如下所示:

#include<iostream>
#include<stdlib.h>
#include<string>
using namespace std;

string ASCII2BCD(const string &str)
{
	string	res;
	size_t	nBegin = 0;
	int	nTemp;
	char	szBuf[16] = { 0 };
	if (str.size() % 2 != 0)
	{
		szBuf[0] = '0';
		szBuf[1] = str[0];
		sscanf(szBuf, "%x", &nTemp);
		nBegin = 1;
		res.push_back((char)nTemp);
	}
	for (; nBegin < str.size(); nBegin += 2)
	{
		szBuf[0] = str[nBegin];
		szBuf[1] = str[nBegin + 1];
		sscanf(szBuf, "%x", &nTemp);
		res.push_back((char)nTemp);
	}
	return res;
}

string	BCD2ASCII(const string &str)
{
	string res;
	for (size_t i = 0; i < str.size(); i++)
	{
		char temp = (str[i] >> 4) & 0x0F;
		if (temp >= 10)
			res.push_back('A' + temp - 10);
		else
			res.push_back('0' + temp);
		temp = str[i] & 0x0F;
		if (temp >= 10)
			res.push_back('A' + temp - 10);
		else
			res.push_back('0' + temp);
	}
	return res;
}

int main()
{
	string str1 = BCD2ASCII("王通"); //BCD转ASCII
	for (int i = 0; i < str1.length(); i++)
	{
		cout << str1[i];
	}
	cout << endl;

	string str2 = ASCII2BCD(str1); //ASCII转BCD

	for (int i = 0; i < str2.length(); i++)
	{
		cout << str2[i];
	}
	cout << endl;
	return 0;
}

运行效果如下:

更多精彩内容其他人还在看

从汇编看c++中变量类型的深入分析

本篇文章是对c++中的变量类型进行了详细的分析介绍。需要的朋友参考下
收藏 0 赞 0 分享

从汇编看c++的默认析构函数的使用详解

本篇文章是对c++中默认析构函数的使用进行了详细的分析介绍。需要的朋友参考下
收藏 0 赞 0 分享

基于c++中的默认拷贝函数的使用详解

本篇文章对c++中默认拷贝函数的使用进行了详细的分析介绍。需要的朋友参考下
收藏 0 赞 0 分享

解析c++中的默认operator=操作的详解

本篇文章是对c++中的默认operator=操作的应用进行了详细的分析介绍。需要的朋友参考下
收藏 0 赞 0 分享

解析c++中参数对象与局部对象的析构顺序的详解

本篇文章是对c++中参数对象与局部对象的析构顺序进行了详细的分析介绍,需要的朋友参考下
收藏 0 赞 0 分享

深入c++中临时对象的析构时机的详解

本篇文章对c++中临时对象的析构时机进行了详细的分析介绍,需要的朋友参考下
收藏 0 赞 0 分享

解析内存对齐 Data alignment: Straighten up and fly right的详解

对于所有直接操作内存的程序员来说,数据对齐都是很重要的问题.数据对齐对你的程序的表现甚至能否正常运行都会产生影响
收藏 0 赞 0 分享

深入内存对齐的详解

本篇文章是对内存对齐进行了详细的分析介绍,需要的朋友参考下
收藏 0 赞 0 分享

深入C语言把文件读入字符串以及将字符串写入文件的解决方法

本篇文章是对C语言把文件读入字符串以及将字符串写入文件的方法进行了详细的分析介绍,需要的朋友参考下
收藏 0 赞 0 分享

深入Windows下的回车是回车换行(\r\n)还是换行回车(\n\r)的详解

本篇文章对Windows下的回车是回车换行(\r\n)还是换行回车(\n\r)进行了详细的分析介绍,需要的朋友参考下
收藏 0 赞 0 分享
查看更多