Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подскажите аналог функции chr 
:(
    Опции темы
kирилл
  Дата 18.7.2006, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 19.5.2005

Репутация: нет
Всего: нет



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

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

Цитата

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


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

Это сообщение отредактировал(а) kирилл - 18.7.2006, 11:39
PM MAIL   Вверх
Orthenner
Дата 18.7.2006, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 22.5.2004
Где: Мытищи

Репутация: нет
Всего: нет



Код

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

int main(int argc, char** argv)
{
    char x=atoi(argv[1]);
    printf("%c\n",x);
    return 0;
}
 
PM MAIL ICQ   Вверх
kирилл
Дата 18.7.2006, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 19.5.2005

Репутация: нет
Всего: нет



А если вот так: (кусок кода)
Код

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);   
  }
 

Это сообщение отредактировал(а) kирилл - 18.7.2006, 12:31
PM MAIL   Вверх
ptr
Дата 18.7.2006, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 661
Регистрация: 31.5.2006
Где: Новосибирск

Репутация: нет
Всего: 14



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

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

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

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

Это сообщение отредактировал(а) ptr - 18.7.2006, 14:57


--------------------
Единственный способ определить границы возможного - это выйти за эти границы, в невозможное.
Артур Кларк.
PM MAIL ICQ   Вверх
Orthenner
Дата 18.7.2006, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 22.5.2004
Где: Мытищи

Репутация: нет
Всего: нет



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

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

Вообще-то это пример написанный за полминуты на коленках... просили программу, которая выводила бы символ по его коду... можно было бы функцию написать, в которую этот код передается, я же взял этот параметр из аргумента программы.... поэтому собственно и atoi... 
PM MAIL ICQ   Вверх
GrayCardinal
Дата 18.7.2006, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 8
Всего: 58



Не парни, ну вы гоните smile

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


--------------------
PM MAIL WWW   Вверх
kирилл
Дата 24.7.2006, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 19.5.2005

Репутация: нет
Всего: нет



Вопрос остается открытым, так как совершенно не ясно, как же заменить функцию chr


GrayCardinal,  посмотрел Ваши посты в других топиках. Что не пост, то флуд и не более. Надо учиться выражаться по сути вопроса!. 
PM MAIL   Вверх
HappyLife
Дата 24.7.2006, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 17.5.2006

Репутация: нет
Всего: 8



Элементарно Ватсон
char x = 50;
printf("%c\n",x); 
PM MAIL   Вверх
nickless
Дата 24.7.2006, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 4
Всего: 181



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

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


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
GrayCardinal
Дата 26.7.2006, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 8
Всего: 58



kирилл
А репу не смотрели ? smile 


--------------------
PM MAIL WWW   Вверх
bsa
Дата 26.7.2006, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



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");
}
 
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0727 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.