进制转换问题:
分为三种:
二进制,八进制,十六进制转换为十进制:
规则:从最低位开始(从右开始),pow(radix,第几位 - 1) * 数字 ,
string aTo10(string num , int radix) {//radix : 基数
int sum = 0;
for (int i = 0; i < num.size(); i++ ) {
sum += (num[i] - '0') * pow(radix , ((num.size()) - 1 - i));
}
return sum + "";
}
十进制转换为二进制八进制十六进制
规则:数字,除以radix得到余数,直到商为零位置,将余数按顺序写出,如果是二进制的话,要进行补位,然后进行逆序
//十进制转二进制:规则: 将该数不断除以radix ,直到商为零为止,然后将每步得到的余数倒过来,就是对应的二进制
对其中函数的解释:
/*
* 使用c_str()函数
c_str函数的返回值是const char*。
c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同.
这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。
举个栗子:
String st = "insert into chuang values ('" + vos[0] + "', '" + vos[1] + "','" + str_time + "')";
const char* sql1 = st.c_str();
*/
const char* p = num.c_str();//返回一个指向正规string字符串的指针,将string类型转化为char[]数组类型
int intnum = atoi(p);//转化为指针
atoi(const char *p);
string tenToa(string num , int radix) {
const char* p = num.c_str();//返回一个指向正规string字符串的指针,将string类型转化为char[]数组类型
int intnum = atoi(p);//转化为指针
string aim = "";
do {
//一个字节对应的是八位
aim += "intnum % radix " ;
intnum = intnum / radix;
} while (intnum != 0);
for (int i = aim.size(); i < 8;i++) {
aim += "0";
}//还应该进行一次补位,按照规范的字节位输出
reverse(aim.begin(), aim.end());//最后要进行一次翻转
}
/*
* 将二进制转换为八进制(小转大)
* 规则:从低位开始,将二进制数每三位一组,转换成对应的八进制数即可
* 将二进制转换为十六进制(小转大)
* 规则:从低位开始,将二进制每四位一组,转换成对应的八进制数即可
* 将八进制转换成二进制(大转小)
* 规则:将八进制的每一位,转化成一个对应的三位的二进制即可
* 将十六进制转换成二进制(大转小)
* 规则:将十六进制的每一位,转化成一个对应的四位的二进制即可
* 可以先写成全1 如: B 1111 --> 1111 - 4 --> 1011
*/