其中一道题是输入一组十六进制数,其中大写字母ABCDEF,数字“1~9”,字符串类型为string。其中把十六进制数转化为二进制数。比如“3A”。输出结果为00111010。题目不难,可惜因为字符串类型为string,当时一时写代码时产生诸多错误。索性这次将string字符串与char字符做一个总结。题目不难,但是细节挺重要的。
#include <string>
#include <sstream>
using namespace std;
#include "IntToString.h"
string StingToBin(string s)
{
string Sbin /*(s.length())*/;
Sbin.resize(200); //因为是String类型,所以需要用这个函数开辟空间大小
int k = 1;
for(int i=0;i < s.length();i++)
{
if(s[i]>'0'&&s[i]<'9')
{
int q = int(s[i])-48; //s[i]为char类型,int类型强转之后是ASCII码。所以要减去48,将char型的数字转化为int型的数字
int p = 1; //p值用于定位,因为一个16进制对应4个二进制数值
while(q/2+1&&p<=4)
{
Sbin[4*k-p] = char(q%2+48); //k值用于表示是第几个十六进制值,加上48同样是将int型的数字转化为char型的数字
q = q/2; //转化为二进制
p++;
}
}
else //考虑到十六进制的“A"~"F"
{
switch(s[i]-'A')
{
case 0: memcpy(&Sbin[4*k-4],"1010",4);break;
case 1: memcpy(&Sbin[4*k-4],"1011",4);break;
case 2: memcpy(&Sbin[4*k-4],"1100",4);break;
case 3: memcpy(&Sbin[4*k-4],"1101",4);break;
case 4: memcpy(&Sbin[4*k-4],"1110",4);break;
case 5: memcpy(&Sbin[4*k-4],"1111",4);break;
}
}
k++;
}
/*Sbin[s.length()] = '\0';*/
return Sbin;
}