toint sprintf c++ casting char int

sprintf - casting int to char usando casting de estilo C++



itoa c++ (4)

Debe usar static_cast<char>(i) para convertir el entero i en char .

reinterpret_cast casi nunca debe usarse, a menos que desee convertir un tipo en un tipo fundamentalmente diferente.

Además, reinterpret_cast depende de la máquina, por lo que su uso seguro requiere una comprensión completa de los tipos, así como la forma en que el compilador implementa la conversión.

Para más información sobre el casting de C ++ vea:

En C tradicional puedes hacer:

int i = 48; char c = (char)i; //Now c holds the value of 48. //(Of course if i > 255 then c will not hold the same value as i).

¿Cuál de los métodos de conversión de c ++ (static_cast, reinterpret_cast) es adecuado para realizar este trabajo?


El uso de reparto estático probablemente resultaría en algo como esto:

// This does not prevent a possible type overflow const char char_max = -1; int i = 48; char c = (i & char_max);

Para evitar un posible desbordamiento de tipos, puede hacer esto:

const char char_max = (char)(((unsigned char) char(-1)) / 2); int i = 128; char c = (i & char_max); // Would always result in positive signed values.

Donde reinterpret_cast probablemente solo se convertiría directamente a char, sin ningún tipo de seguridad de lanzamiento. -> Nunca use reinterpret_cast si también puede usar static_cast. Si está lanzando entre clases, static_cast también se asegurará de que los dos tipos coincidan (el objeto es un derivado del tipo de conversión).

Si su objeto es de tipo polimórfico y no sabe cuál es, debe usar dynamic_cast, que realizará una verificación de tipo en tiempo de ejecución y devolverá nullptr si los tipos no coinciden.

Si necesita const_cast, lo más probable es que haya hecho algo mal y debe pensar en posibles alternativas para corregir la corrección de const en su código.


Puede convertir implícitamente entre tipos numéricos, incluso cuando eso pierde precisión:

char c = i;

Sin embargo, es posible que desee habilitar las advertencias del compilador para evitar conversiones con pérdidas como esta. Si lo haces, entonces usa static_cast para la conversión.

De los otros moldes:

  • dynamic_cast solo funciona para punteros o referencias a tipos de clases polimórficas;
  • const_cast no puede cambiar los tipos, solo const o calificadores volatile ;
  • reinterpret_cast es para circunstancias especiales, la conversión entre punteros o referencias y tipos completamente no relacionados. Específicamente, no hará conversiones numéricas.
  • Los modelos de estilo C y de estilo de función hacen cualquier combinación de static_cast , const_cast y reinterpret_cast para hacer el trabajo.

reinterpret_cast no se puede utilizar para esta conversión, el código no se compilará. Según la sección 5.2.10-1 del estándar C ++ 03:

Conversions that can be performed explicitly using reinterpret_cast are listed below. No other conversion can be performed explicitly using reinterpret_cast.

Esta conversión no está listada en esa sección. Incluso esto no es válido:

long l = reinterpret_cast<long>(i)

static_cast es el que debe usarse aquí. Vea esto y esto tan preguntas.