Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Entender conversão implícita
  2. Entender conversão explícita
  3. Entender a perda de dados no casting
  4. Entender a sinalização no casting
  5. Converter int para bool e bool para int
  6. Converter int,bool e float para string
  7. Converter string para int,bool e float
  8. Converter bytes para int,bool e float
  9. conversão númerico para binário
  10. conversão númerico para string hexadecimal
  11. conversão envolvendo arrays

A linguagem C++ nos permite realizar a casting dos tipos de dados primitivos podendo ser dos tipo implícita ou explícita. Nesta parte do tutorial vamos aprender sobre casting e também a conversão básicas entre os tipos primitivos.

O assunto casting também foi visto em Tutorial C: Casting.

No casting implícito, sem perda de dados, a linguagem C++ não faz nenhum tipo de validação e a conversão é feita automaticamente de uma tipo de dado de menor capacidade de armazenamento para uma tipo de dado maior capacidade.

Sintaxe
long int < int
int < short
short < char
Onde
<: Sentido da conversão. Menor tamanho para o de maior tamanho
Exemplo 1
#include <iostream>
using namespace std;

int main()
{
    int a;
    short b= 256;
    a = b;
    cout << a << endl;
    cout << b << endl;
    return 0;
}

No casting implícito, com perda de dados, a linguagem C++ faz uma validação interna e retornando uma tipo de dado de menor capacidade de armazenamento para uma tipo de dado maior capacidade.

Sintaxe
long int > int
int > short
short > char
Onde
>  : Sentido da conversão. Maior tamanho para o de menor tamanho
Exemplo 2
#include <iostream>
using namespace std;

int main()
{
    int vl_int = 256;
    char vl_char = vl_int;

    cout << +vl_char << endl;
    return 0;
}
Saída
0

Como o tipo de dado char armazena apenas 1 byte, na conversão acima, apenas o último byte do inteiro foi atribuído a variável vl_char resultando em um valor 0. O valor 256 é armazenado como 0x100 em memória.

O símbolo + foi utilizado para informar que o valor vl_char deve ser exibido como valor numérico e não caracter.

Para o casting de números signed de menor tamanho para signed de maior tamanho, a sinalização é mantida. A conversão é feita internamente sem que haja a necessidade de intervenção de código.

Exemplo 5
#include <iostream>
using namespace std;

int main()
{
    char vl_negativo = -128;
    int int_negativo = vl_negativo; 
    
    cout << int_negativo << endl;
    return 0;
}
Saída
-128

Nos castings discutidos acima, com perda de dado, e de acordo com os tipos de dados estudados, temos como exemplo a relação das seguintes perdas de dados:

Origem Tamanho(bytes) Destino Tamanho(bytes) Dados perdidos(bytes)
long int 8 int 4 4
int 8 short 2 2
short 8 char 1 1
long double 8 double 8 8
long float 8 float 4 4

A tabela acima possui um pequeno exemplo da conversão de tipos para exemplificar o casting com perda de dados. Baseado nos tipo de dados já estudados é possível relacionar a quantidade de dados perdidos nesse tipo de conversão.

No casting explícito, o tipo de dados de destino é informado manualmente. A expressão é validada e convertida para o tipo de dado informado como destino. Nesse tipo de casting, também há perda de dados como visto anteriormente.

Sintaxe
tipo_dado_destino nome_variavel = (tipo_dado_destino) expressao|valor;
Exemplo 5
#include <iostream>
using namespace std;

int main()
{
    float valorFloat = 100.99;
    int inteiro = (int)valorFloat; //Valor obtido :100
    float decimal = valorFloat - inteiro; 

    cout << inteiro << endl;
    cout << decimal << endl;
    return 0;
}
Saída
100
0.989998

Os tópicos sobre perda de dados e sinalização mencionados anteriormente podem ser aplicados à conversão explícita dependendo dos tipos de dados envolvidos.

Nesta parte do tutorial vamos estudar a conversão de dados entre os tipos booleanos, inteiros e string. Apenas a conversão básica será abordada.

A conversão de valores booleanos true ou false para valores inteiros 0 ou 1 podemos utilizar construtor dos tipos int e bool passando como argumento um valor que desejamos converter.

O assunto construtor está associado a orientação a objetos e esse assunto será visto em uma futura seção, mas podemos utilizá-los sem estudar o assunto.

Sintaxe
int int(valor);
bool bool(valor);
Onde
v: Valor para conversão
Retorno
int convendo v convertido
bool contendo v convertido
Exemplo 4
#include <iostream>
using namespace std;

int main()
{
    int i1 = int(false);
    int i2 = int(true);
    
    bool b1 = bool(1);
    bool b2 = bool(0);

    cout << i1 << endl;
    cout << i2 << endl;
    
    cout << boolalpha  << b1 << endl;
    cout << boolalpha  << b2 << endl;
    
    return 0;
}
Saída
0
1
true
false

Outra forma de conversão de valores booleanos e inteiros como estudados acima é utilizando o casting:

Sintaxe
(int)valor_bool;
(bool)valor_inteiro;
Exemplo 4
#include <iostream>
using namespace std;

int main()
{
    int i1 = (int)true;
    int i2 = (int)false;
    
    bool b1 =  (bool)1;
    bool b2 =  (bool)0;

    cout << i1 << endl;
    cout << i2 << endl;
    
    cout << boolalpha  << b1 << endl;
    cout << boolalpha  << b2 << endl;
    
    return 0;
}
Saída
0
1
true
false

É importante lembrar que qualquer valor diferente de zero é visto com true e zero é visto como false.

Para a conversão de tipos de dados básicos como int, float e bool para o tipo string, utilizamos a função to_string. Essa função recebe uma argumento númerico ou booleano que é retornado como string.

Sintaxe
string to_string(int v);
string to_string(float v);
string to_string(bool v);
Onde
v : Valor para conversão
Exemplo 5
#include <iostream>
using namespace std;

int main()
{  
    string str1 = to_string(false);
    string str2 = to_string(10);
    string str3 = to_string(2.99);
    
    cout << str1 << endl;
    cout << str2 << endl;
    cout << str3 << endl;
}
Saída
0
10
2.990000
  1. 28/07/2025 - revisão 4 - ajuste em sintaxes
  2. 30/09/2024 - revisão 3 - Correção: numeração exemplos; Remoção: conversão com casting repetido; ajustes pontuais
  3. 30/08/2024 - revisão 2 - Correção em links de objetivos
  4. 09/02/2024 - revisão 1 - correção em navegação, exemplos e erros gramaticais
  5. 30/06/2023 - versão inicial