C++进制转换(一)进制之间的转换
1. 10 进制与 2 进制
1.1 10进制转2进制 -10(int)转2(string)
std:: string IntToBinary ( int intx) {
std:: string binary = "" ;
int a = intx;
while ( a) {
binary = std:: to_string ( a % 2 ) + binary;
a /= 2 ;
}
return binary;
}
std:: string IntToBinary ( int intx) {
std:: string binary = "" ;
int temp = intx / 2 ;
int left = intx % 2 ;
if ( temp > 0 ) {
binary += IntToBinary ( temp) ;
}
if ( left < 2 ) {
binary += ( left + '0' ) ;
}
else {
binary += ( left - 2 ) ;
}
return binary;
}
1.2 2进制转10进制 -2(string)转10(int)
int IntFromBinary ( std:: string str) {
int count = 0 ;
int num = ( int ) str. size ( ) - 1 ;
for ( unsigned i = 0 ; i < str. size ( ) ; i++ ) {
count += ( ( str[ i] - 48 ) * std:: pow ( 2 , num) ) ;
num-- ;
}
return count;
}
2. 10 进制与 8 进制
2.1 10进制转8进制 -10(int)转8(string)
std:: string IntToOctal ( int intx) {
std:: string octal = "" ;
int temp = intx / 8 ;
int left = intx % 8 ;
if ( temp > 0 ) {
octal += IntToOctal ( temp) ;
}
if ( left < 8 ) {
octal += ( left + '0' ) ;
}
else {
octal += ( left - 8 ) ;
}
return octal;
}
2.2 8进制转10进制 -8(string)转10(int)
int IntFromOctal ( std:: string str) {
int count = 0 ;
int num = ( int ) str. size ( ) - 1 ;
for ( unsigned i = 0 ; i < str. size ( ) ; i++ ) {
count += ( ( str[ i] - 48 ) * std:: pow ( 8 , num) ) ;
num-- ;
}
return count;
}
3. 10 进制与16进制
3.1 10进制转16进制 -10(int)转16(string)
std:: string IntToHex ( int intx) {
std:: string hexadecimal = "" ;
int temp = intx / 16 ;
int left = intx % 16 ;
if ( temp > 0 ) {
hexadecimal += IntToHex ( temp) ;
}
if ( left < 10 ) {
hexadecimal += ( left + '0' ) ;
}
else {
hexadecimal += ( 'A' + left - 10 ) ;
}
return hexadecimal;
}
3.2 16进制转10进制 -16(string)转10(int)
int IntFromHex ( std:: string str) {
int count = 0 ;
int num = ( int ) str. size ( ) - 1 ;
for ( unsigned i = 0 ; i < str. size ( ) ; i++ ) {
int number = 0 ;
if ( str[ i] >= '0' && str[ i] <= '9' ) {
number = str[ i] - '0' ;
}
else if ( str[ i] >= 'a' && str[ i] <= 'f' ) {
number = str[ i] - 'a' + 10 ;
}
else if ( str[ i] >= 'A' && str[ i] <= 'F' ) {
number = str[ i] - 'A' + 10 ;
}
count += ( ( str[ i] - 48 ) * std:: pow ( 16 , num) ) ;
num-- ;
}
return count;
}
4. 10进制与任意进制
4.1 10进制与任意进制 -10(int)转任意进制(string)
# include <math.h>
std:: string ConvertTool :: DecimalToAnybit ( std:: string input, int out_bit) {
std:: string output = "" ;
int data_int = std:: atoi ( input. c_str ( ) ) ;
int bit = ( out_bit > 10 ) ? 10 : out_bit;
int temp = data_int / out_bit;
int left = data_int % out_bit;
if ( temp > 0 ) {
output += DecimalToAnybit ( std:: to_string ( temp) , out_bit) ;
}
if ( left < bit ) {
output += ( left + '0' ) ;
}
else {
output += ( out_bit > 10 ) ? ( 'A' + left - 10 ) : ( left - out_bit) ;
}
return output;
}
4.2 任意进制转10进制 -任意进制(string)转10(int)
int InverseConvert ( ) {
std:: string str = ui-> input_linedit-> text ( ) . toStdString ( ) ;
int num = ( int ) str. size ( ) - 1 ;
for ( unsigned i = 0 ; i < str. size ( ) ; i++ ) {
output += ( ( str[ i] - 48 ) * std:: pow ( bit_state, num) ) ;
num-- ;
}
}
return output;
}
5. 任意进制转任意进制 -任意进制(string)转任意进制(string)
# include <math.h>
std:: string ConvertTool :: ConvertToAnybit ( std:: string input, int in_bit, int out_bit) {
int decimal = 0 ;
int num = ( int ) input. size ( ) - 1 ;
for ( unsigned i = 0 ; i < input. size ( ) ; i++ ) {
decimal += ( ( input[ i] - 48 ) * std:: pow ( in_bit, num) ) ;
num-- ;
}
std:: string output = "" ;
int bit = ( out_bit > 10 ) ? 10 : out_bit;
int temp = decimal / out_bit;
int left = decimal % out_bit;
if ( temp > 0 ) {
output += DecimalToAnybit ( std:: to_string ( temp) , out_bit) ;
}
if ( left < bit ) {
output += ( left + '0' ) ;
}
else {
output += ( out_bit > 10 ) ? ( 'A' + left - 10 ) : ( left - out_bit) ;
}
return output;
}