Случайный int 1-255 для символа в C - PullRequest
5 голосов
/ 25 февраля 2010

У меня есть функция, которая возвращает целое число от 1 до 255. Есть ли способ превратить это int в символ, который я могу strcmp() в существующую строку.

По сути, мне нужно создать строку букв (все значения ASCII) из PRNG. У меня все работает, кроме int и char. Там нет функции Chr(), как в PHP.

Ответы [ 5 ]

8 голосов
/ 25 февраля 2010

A char в C может принимать значения только от CHAR_MIN до CHAR_MAX. Если char подписано, CHAR_MAX может быть меньше 255 (например, общее значение равно 127). Если char не подписано, CHAR_MAX должно быть не менее 255.

Предполагая, что ваш char не подписан, вы можете просто назначить случайное число для char (например, в вашей строке). Если char подписан, вы должны быть более осторожны. В этом случае вы, вероятно, захотите присвоить значение mod 128 вашему char.

Фактически, поскольку вы имеете дело с ASCII, вы можете захотеть сделать это в любом случае (ASCII только до 127).

Наконец, обязательное примечание о переносимости: значение char в виде целого числа может не представлять его значение ASCII, если базовая кодировка не ASCII - пример - EBCDIC.

6 голосов
/ 25 февраля 2010

Просто приведите его к char (как показано ниже). Если вы собираетесь использовать его в строковой функции (strcat, strcmp и т. Д.), То он должен быть в массиве char с нулевым терминатором ('\0') в конце (также показан ниже) ... .

int num = myrand(1,255);

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

...

if(strcmp(str, otherString...
5 голосов
/ 25 февраля 2010

Просто приведите его к персонажу:

char c = (char)myRandomInt;
4 голосов
/ 25 февраля 2010

A char - это просто целое число с диапазоном значений 255, а символьные литералы, такие как 'a', также просто числа.

Просто брось на чар.

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

Чтобы использовать что-то вроде strcmp, вам нужен char*. Функция ожидает указатель на первый элемент массива символов (с нулевым символом в конце), а не адрес одного символа.

Итак, вы хотите:

char szp[] = {c, '\0'};
int isDifferent = strcmp(szp, "c");
1 голос
/ 25 февраля 2010

В C char - это, по сути, int между 0 и 255, поэтому вы можете обращаться с целым числом непосредственно как символ, если вы хотите sprintf в буфер или аналогичный. Возможно, вы захотите, чтобы ваша функция возвращала char, фактически, чтобы было понятно, что происходит.

...