Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Подскажите аналог функции chr


Автор: kирилл 18.7.2006, 11:38
Переписываю код с delphi  на С под линукс, встретилась функция chr, а ее аналога для С найти не могу

Вот ее описание для delphi:

Цитата

Function Chr(X: Byte): Char;
Возвращает символ с порядковым номером Х в ASCII-таблице. 


Как ее пожно переписать на С?  

Автор: Orthenner 18.7.2006, 12:22
Код

#include "stdio.h"
#include "stdlib.h"

int main(int argc, char** argv)
{
    char x=atoi(argv[1]);
    printf("%c\n",x);
    return 0;
}
 

Автор: kирилл 18.7.2006, 12:29
А если вот так: (кусок кода)
Код

for i := 0 to Length(Data) div 2 - 1 do
   begin
     x := Pos(Data[i * 2 + 1], ss) - 1;
     if x < 0 then Exit;
     ss := Copy(ss, Length(ss), 1) + Copy(ss, 1,Length(ss) - 1);
     x2 := Pos(Data[i * 2 + 2], ss) - 1;
     if x2 < 0 then Exit;
     x  := x + x2 * 16;
     s2 := s2 + chr(x);
     ss := Copy(ss, Length(ss), 1) + Copy(ss, 1,Length(ss) - 1);
   end;
 


По идее должно получиться что-то вроде:
Код

for (i = 0; i <= (strlen(str)/2)-1; i++)
  {
   x1 = strstr(ss, str[i*2]);
   if (x1 == NULL)
     exit(-1);

   sprintf(stemp, ss)
   stemp[0] = ss[strlen(ss)-1];
   for (k = 1; k < strlen(ss)-1; k++)
     stemp[k] = ss[k-1];
   sprintf(ss, stemp);

   x2 = strstr(ss, str[i*2+1]);
   if (x2 == NULL)
     exit(-1);
   x1 = x1 + x2*16;
   strcmp(s2, ....................);

   sprintf(stemp, ss)
   stemp[0] = ss[strlen(ss)-1];
   for (k = 1; k < strlen(ss)-1; k++)
     stemp[k] = ss[k-1];
   sprintf(ss, stemp);   
  }
 

Автор: ptr 18.7.2006, 14:54
Цитата(kирилл @  18.7.2006,  16:29 Найти цитируемый пост)
По идее должно получиться что-то вроде:

На первый взгляд вроде так.

Цитата(Orthenner @  18.7.2006,  16:22 Найти цитируемый пост)
char x=atoi(argv[1]);

Масло масляное. Из char в int, а потом опять в char.  

Автор: Orthenner 18.7.2006, 15:40
Цитата(ptr @ 18.7.2006,  15:54)
Цитата(Orthenner @  18.7.2006,  16:22 Найти цитируемый пост)
char x=atoi(argv[1]);

Масло масляное. Из char в int, а потом опять в char.

Вообще-то это пример написанный за полминуты на коленках... просили программу, которая выводила бы символ по его коду... можно было бы функцию написать, в которую этот код передается, я же взял этот параметр из аргумента программы.... поэтому собственно и atoi... 

Автор: GrayCardinal 18.7.2006, 18:13
Не парни, ну вы гоните smile

kирилл
char и BYTE
в Си есть суть одно и тоже. Учи Си smile Фэйс контроль (контроль типов) в данном случае отсутствует напрочь. 

Автор: kирилл 24.7.2006, 11:13
Вопрос остается открытым, так как совершенно не ясно, как же заменить функцию chr


GrayCardinal,  посмотрел Ваши посты в других топиках. Что не пост, то флуд и не более. Надо учиться выражаться по сути вопроса!. 

Автор: HappyLife 24.7.2006, 11:58
Элементарно Ватсон
char x = 50;
printf("%c\n",x); 

Автор: nickless 24.7.2006, 15:38
Цитата(kирилл @ 24.7.2006,  10:13)
Вопрос остается открытым, так как совершенно не ясно, как же заменить функцию chr

Чтож непонятного, говорят же тебе, в С char и byte это одно и тоже, вернее byte вообще нету, 
если хочешь, напиши (char)X, если Х у тебя int. 

Автор: GrayCardinal 26.7.2006, 11:44
kирилл
А репу не смотрели ? smile 

Автор: bsa 26.7.2006, 13:24
kирилл, после паскаля (Delphi) сложно переходить на Си. Потому что в Си есть только 4 штатных целых типа: charshort intint и long int (есть еще модификатор unsigned, который из приведенных выше типов делает беззнаковое целое). И нет никакого контроля. Разве что компилятор может предупреждение выдать, когда попытаешься переменной типа char присвоить значение типа int. С другой стороны, эта особенность позволяет легко обходиться без функции chr и обратных ей. Потому что просто присвоив переменной типа char какое либо число, а затем выведя его на экран стандартным способом ты получишь соответствующий символ.
Пример:
Код
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
        int code;
        char symbol;
        if ( argc > 1 ) {
               code = atoi(argv[1]);
               if ( (code < 256) && (code > 0 ) ) {
                       symbol = (char)code;          //здесь явное преобразование типа (char) не обязательно, но оно избавить от предупреждения компилятора
                       printf("Symbol with code %d is '%c'\n", code, symbol);
               } else
                       fprintf(stderr, "%d is not valid ASCII code\n", code);
        } else
               fprintf(stderr, "do not forget to add a ASCII code as parameter to this program\n");
}
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)