
1.代码部分
话不多说,直接上代码:
#include<iostream>
#include<cmath>
#define L_STUDIO_ACE 2009
using namespace std;
typedef char c;
typedef string s;
typedef long long int l;
l z(c x,c y){//z函数 将16进制转换成10进制
c k[2];
k[0]=x;
k[1]=y;//方便使用for循环
l h=0;//h储存转换的10进制数据
for(l i=0;i<2;i++){
if('0'<=k[i]&&k[i]<='9'){
h+=(k[i]-48)*pow(16,1-i);//1-i为位权
}else if('A'<=k[i]&&k[i]<='F'){
h+=(k[i]-55)*pow(16,1-i);
}else if('a'<=k[i]&&k[i]<='f'){
h+=(k[i]-87)*pow(16,1-i);//大小写支持
}else{
return -1;//错误校验码
}
}
return h;
}
int main(){
s p,q;//定义字符串p,q
cout<<"16进制颜色代码转RGB颜色代码转换器v1.4.5 Made By L_STUDIO_ACE 2023 5.20 SAT."<<endl;
cout<<"请输入待转换的16进制颜色代码"<<endl;
for(l i=0;i<6;i+=2){
cin>>p[i]>>p[i+1];//每次分成2位数转换
q=q+p[i]+p[i+1];//q为p的克隆
}
l r,g,b;//r,g,b存储3个颜色的值
r=z(p[0],p[1]);
g=z(p[2],p[3]);
b=z(p[4],p[5]);
if(r==-1||g==-1||b==-1){
cout<<"DATA ERROR!";
return 0;
}else{
cout<<"将 16进制颜色代码 "<<q<<" 转换成 RGB颜色代码 的结果为"<< endl;
cout<<"R : "<<r<<endl<<"G : "<<g<<endl<<"B : "<<b;
}
cin.get();
cin.get();
return 0;
}
v1.4.5
2.构造思路
16进制颜色代码一共有6位数字,其中前两位对应"R",中间两位对应"G",最后两位对应"B"。因此只需要将每两位16进制数分别转换成10进制即可。
E
.
G
.
E.G.
E.G.
F
F
336
6
16
=
F
F
16
+
3
3
16
+
6
6
16
FF3366_{16} = FF_{16} + 33_{16} + 66_{16}
FF336616=FF16+3316+6616
∗
R
∗
=
F
F
16
=
25
1
10
*R* = FF_{16} = 251_{10}
∗R∗=FF16=25110
∗
G
∗
=
3
3
16
=
5
1
10
*G* = 33_{16} = 51_{10}
∗G∗=3316=5110
∗
B
∗
=
6
6
16
=
10
2
10
*B* = 66_{16} = 102_{10}
∗B∗=6616=10210
3.总结部分
3.1 目前的问题:
(暂未找出)
有任何bug以及改进建议欢迎评论区留言!!!
Made By L_STUDIO_ACE 2023/5/20 SAT.