2010-02-25 1 views
5

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

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

+4

Просто бросьте его как символ, нет? –

+0

@Anon. Возможно, вы захотите опубликовать это как ответ, чтобы мы могли его проголосовать. –

+1

ASCII только поднимается до 127. –

ответ

4

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"); 
+0

' CHAR_MAX' должен быть таким же 127, если 'char' подписан. Вы имели в виду 'zero = C - 'c';'? ''c' - 'c'', очевидно, 0. Но если вы действительно имели в виду' C -' c '; ', то это не гарантируется стандартом (хотя в большинстве случаев это будет 0). –

+0

@Alok: Не имеет значения 67 == 'C' для вышеупомянутого ответа. Важной частью было назначение целочисленного литерала. Исправлена ​​формулировка о подписанных/неподписанных. Благодарю. –

+0

Да. Я просто комментировал вашу декларацию и инициализацию «char zero». –

6

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

int num = myrand(1,255); 

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

... 

if(strcmp(str, otherString... 
5

Просто бросить его в полукокс:

char c = (char)myRandomInt; 
1

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

8

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

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

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

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

+0

@serial_downvoter: Надеюсь, у вас есть веская причина. :-) –

+0

Alok - +1 только за этот комментарий: P –

+0

@BillyIneal: Спасибо. 3 из моих ответов были сокращены за короткий промежуток времени - без каких-либо объяснений. Вздох. –

Смежные вопросы