2010-02-25 7 views
5

Tengo una función que devuelve un entero, entre 1 y 255. ¿Hay alguna manera de convertir este int en un carácter que puedo strcmp() a una cadena existente.Random int 1-255 a carácter en C

Básicamente, necesito crear una cadena de letras (todos los valores ASCII) de un PRNG. Tengo todo funcionando menos la parte int to char. No hay función Chr() como en PHP.

+4

Simplemente colóquelo como un char, ¿no? –

+0

@Anon. Es posible que desee publicar eso como respuesta, para que podamos votarlo. –

+1

ASCII solo sube a 127. –

Respuesta

4

A char es solo un número entero con un rango de valores de 255, y literales de caracteres como 'a' también son solo un número.

Acaba de lanzar a un char.

char C = 67; 
char c = 'c'; 
char zero = 'c' - 'c'; 
char also_zero = c - 'c'; 
/*Note: zero == 0*/ 

usar algo como strcmp necesita un char* sin embargo. La función espera un puntero al primer elemento de una matriz de caracteres (cero terminado) y no la dirección de un solo carácter.

Así que quieres:

char szp[] = {c, '\0'}; 
int isDifferent = strcmp(szp, "c"); 
+0

' CHAR_MAX' tiene que ser como la mayoría de 127 si 'char' está firmado. ¿Querías decir 'cero = C - 'c';'? ''c' - 'c'' es obviamente 0. Pero si quiso decir' C -' c '; ', entonces eso no está garantizado por el estándar (aunque en la mayoría de los casos será 0). –

+0

@Alok: Si 67 == 'C' no importa para la respuesta anterior. La parte importante fue asignar un valor literal entero. Se arregló la redacción sobre firmado/sin firmar. Gracias. –

+0

sí. Solo estaba comentando tu declaración y la inicialización de 'char zero '. –

6

Sólo convertirlo a char (como se muestra a continuación). Si va a usarlo en una función de cadena (strcat, strcmp, etc.), tiene que estar en una matriz char con un terminador nulo ('\0') al final (también se muestra a continuación) ....

int num = myrand(1,255); 

char str[2] = {(char)num, '\0'}; 

... 

if(strcmp(str, otherString... 
5

Sólo echarlo a un char:

char c = (char)myRandomInt; 
1

En C, una char es básicamente un int entre 0 y 255, por lo que puede tratar al número entero directamente como un char si quieres sprintf a un buffer o similar. Es posible que desee hacer que su función devuelva un char, de hecho, para que sea obvio lo que está pasando.

8

A char en C solo puede tomar valores de CHAR_MIN a CHAR_MAX. Si se firma char, CHAR_MAX puede ser menor que 255 (por ejemplo, un valor común es 127). Si char no tiene signo, CHAR_MAX tiene que ser de al menos 255.

Asumiendo que su char no tiene signo, sólo puede asignar el número aleatorio a un char (en la cadena, por ejemplo). Si se firma char, debe tener más cuidado. En este caso, probablemente desee asignar el valor mod 128 a su char.

De hecho, dado que se trata de ASCII, es posible que desee hacerlo de todos modos (ASCII solo tiene 127).

Finalmente, obligatoria observación portabilidad: un valor char 's como un entero puede no representa su valor ASCII, si la codificación subyacente no es ASCII — un ejemplo es EBCDIC.

+0

@serial_downvoter: espero que tengas una buena razón. :-) –

+0

Alok - +1 solo por ese comentario: P –

+0

@BillyONeal: Gracias. 3 de mis respuestas se volvieron downvoted en un corto período de tiempo, sin ninguna explicación. Suspiro. –