2011-02-15 35 views
7

Estoy haciendo mi primera aplicación paralela, pero estoy atascado con los conceptos básicos de C. Necesito saber, cómo convertir int a char y cómo anexar un carácter a otro.C - fundición int a char y anexar char a char

Podría ayudarme por favor, me alegraría. Gracias.

+0

no veo nada "programación en paralelo" sobre esto. ¿Por favor explique? – abelenky

+0

Mi aplicación es la primera en el curso de programación paralela, por lo tanto no hay etiqueta para la programación paralela, solo tiene algunos problemas con el casting para agregar caracteres – Waypoint

Respuesta

8

Puede usar la función itoa para convertir el número entero en una cadena.

Puede usar la función strcat para agregar caracteres en una cadena al final de otra cadena.

Si desea convertir un entero a un personaje, simplemente hacer lo siguiente -

int a = 65; 
char c = (char) a; 

Nota que desde personajes son más pequeñas en tamaño que entero, este casting puede causar una pérdida de datos. Es mejor declarar la variable de caracteres como unsigned en este caso (aunque aún puede perder datos).

Para hacer una lectura ligera sobre la conversión de tipo, vaya here.

Si aún tiene problemas, coméntelos en esta respuesta.

Editar

Ir here para un ejemplo más adecuado de unir caracteres.

también se da algún tipo de relación más útil abajo -

  1. http://www.cplusplus.com/reference/clibrary/cstring/strncat/
  2. http://www.cplusplus.com/reference/clibrary/cstring/strcat/

Segunda Edición

char msg[200]; 
int msgLength; 
char rankString[200]; 

........... // Your message has arrived 
msgLength = strlen(msg); 
itoa(rank, rankString, 10); // I have assumed rank is the integer variable containing the rank id 

strncat(msg, rankString, (200 - msgLength)); // msg now contains previous msg + id 

// You may loose some portion of id if message length + id string length is greater than 200 

Tercera Edición

Ve a este link. Aquí encontrará una implementación de itoa. Usa eso en cambio.

+1

Tenga en cuenta que el uso de 'strcat' siempre es una mala idea. Incluso sus versiones más seguras ('strncat',' strlcat') funcionan mal; n las inserciones costarán O (n^2) ya que cada llamada deberá atravesar la cadena para encontrar el final. Si está haciendo muchas concatenaciones, es mejor rastrear el tamaño actual en una variable separada. – asveikau

0
int i = 100; 
char c = (char)i; 

No hay forma de agregar un carácter a otro. Pero puedes crear una matriz de caracteres y usarla.

+0

C lo deja en la implementación para especificar si 'char' está' signed' o 'unsigned '. En la práctica, los compiladores tienden a seguir lo que recomienda ABI de la arquitectura, por lo que 'char' se firma en x86 y no está firmado en PPC/ARM. GCC puede anularse con '-fsigned-char' y' -funsigned-char', pero esto potencialmente rompe ABI con las bibliotecas instaladas. – ephemient

+0

@ephemient: no lo sabía. ¡Gracias! – Andrew

2
int myInt = 65; 

char myChar = (char)myInt; // myChar should now be the letter A 

char[20] myString = {0}; // make an empty string. 

myString[0] = myChar; 
myString[1] = myChar; // Now myString is "AA" 

Todo esto debe encontrarse en cualquier introducción al libro C, o por alguna búsqueda básica en línea.

3

Fundición int a carbón se hace simplemente mediante la asignación con el tipo entre paréntesis:

int i = 65535; 
char c = (char)i; 

Nota: pensé que podría estar perdiendo de datos (como en el ejemplo), debido a que los tamaños de los tipos son diferentes.

No se pueden agregar caracteres a los caracteres (a menos que se refiera a aritmética, entonces son operadores simples).Necesita utilizar cadenas, AKA arrays de caracteres y <string.h> funciones como strcat o sprintf.

+0

Este ejemplo particular también es muy probable que cause un comportamiento indefinido en muchas plataformas (donde 'char' está firmado y no puede contener valores de hasta 65535). –

+0

de ahí mi nota en el texto :-) – littleadv

1

Casting int a char implica la pérdida de datos y es probable que el compilador lo advierta.

La extracción de un byte dado desde un int suena más razonable y se puede hacer así:

number & 0x000000ff; /* first byte */ 
(number & 0x0000ff00) >> 8; /* second byte */ 
(number & 0x00ff0000) >> 16; /* third byte */ 
(number & 0xff000000) >> 24; /* fourth byte */