Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.55/74: Рейтинг темы: голосов - 74, средняя оценка - 4.55
142 / 111 / 61
Регистрация: 01.08.2012
Сообщений: 297
1

C помощью каких функций можно преобразовать тип char в integer

12.10.2012, 12:18. Показов 13884. Ответов 29
Метки нет (Все метки)

Подскажите пожалуйста, с помощью каких функций можно преобразовать тип char в integer. Чтобы, допустим, символ "2"(сhar) преобразовать в 2(integer). На прологе есть такой предикат (char_int(Char,Integer)) а на delphi?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.10.2012, 12:18
Ответы с готовыми решениями:

Нельзя преобразовать тип char к integer
Помогите исправить ошибку. Я понимаю в чем заключается ошибка в 16 строке, но понятия не имею, как...

Нельзя преобразовать тип integer к char
ошибка в 72 строке если еще найдутся, исправьте пожалуйста Program KurRab; Uses crt, GraphABC;...

Ошибка, нельзя преобразовать тип Integer к Char
ошибка в 72 строке если еще найдутся, исправьте пожалуйста Program KurRab; Uses crt, GraphABC;...

Нельзя преобразовать тип function(a: integer;b: integer):integer к real
unit matr1; interface type matr2=array of real; matr3=array of real; procedure sum...

29
210 / 169 / 24
Регистрация: 24.04.2012
Сообщений: 615
12.10.2012, 12:32 2
StrToInt
1
4085 / 1799 / 211
Регистрация: 06.10.2010
Сообщений: 4,030
12.10.2012, 13:45 3
Delphi
1
int:=ord(ch)-ord('0');
1
Кратк. - сест. тал.
86 / 50 / 4
Регистрация: 13.03.2008
Сообщений: 543
13.10.2012, 22:10 4
StrToInt(имя_переменной_типа_char);
1
142 / 111 / 61
Регистрация: 01.08.2012
Сообщений: 297
15.10.2012, 10:18  [ТС] 5
StrToInt - не срабатывает, выдает ошибку
murderer, спасибо огромное, получилось )
0
Кратк. - сест. тал.
86 / 50 / 4
Регистрация: 13.03.2008
Сообщений: 543
15.10.2012, 18:32 6
Цитата Сообщение от masterpiece Посмотреть сообщение
StrToInt - не срабатывает, выдает ошибку
Код в студию где не срабатывает. Всю жизнь этой функцией пользуюсь, никогда проблем не возникало.
1
4085 / 1799 / 211
Регистрация: 06.10.2010
Сообщений: 4,030
16.10.2012, 08:26 7
Наверное не подключен модуль SysUtils.
1
142 / 111 / 61
Регистрация: 01.08.2012
Сообщений: 297
16.10.2012, 12:06  [ТС] 8
Цитата Сообщение от Vit@L Посмотреть сообщение
Код в студию где не срабатывает. Всю жизнь этой функцией пользуюсь, никогда проблем не возникало.
Я нашла свою ошибку char тип то однобайтный, изменила тип и все заработало

Цитата Сообщение от murderer Посмотреть сообщение
Наверное не подключен модуль SysUtils.
Он подключается автоматически при создании формы

Добавлено через 44 минуты
Почему в этом кусочке кода выдает ошибку исключения?
Delphi
1
2
3
4
5
6
7
8
9
randomize;
      a:=random(10);
      buf1:=inttostr(a);
      label1.caption:=buf1;
      st:=buf3;
      label2.Caption:=st;
      b:=strtoint(st);
      //c:=a+b;
     // label3.Caption:=inttostr(c);
0
210 / 169 / 24
Регистрация: 24.04.2012
Сообщений: 615
16.10.2012, 17:16 9
Потому что buf3 космический объект неопределенного типа, равный тройному радиуса солнца.
0
142 / 111 / 61
Регистрация: 01.08.2012
Сообщений: 297
16.10.2012, 17:52  [ТС] 10
Цитата Сообщение от Nutserus Посмотреть сообщение
Потому что buf3 космический объект неопределенного типа, равный тройному радиуса солнца.
Вы уверены в своем выражении? а почему тогда buf1 воспринимается без проблем, а к buf3 претензии?
buf1 и buf3 переменные одного типа
0
210 / 169 / 24
Регистрация: 24.04.2012
Сообщений: 615
16.10.2012, 20:14 11
Цитата Сообщение от masterpiece Посмотреть сообщение
Вы уверены в своем выражении? а почему тогда buf1 воспринимается без проблем, а к buf3 претензии?
buf1 и buf3 переменные одного типа
Я просто предположил, вы из скромности все свое творение не можете выложить видимо, и что у вас какого типа и чему равно на момент присвоения знает только Ктулху.
0
142 / 111 / 61
Регистрация: 01.08.2012
Сообщений: 297
17.10.2012, 11:30  [ТС] 12
Приложение - это скромный клиент-сервер. С клиента на сервер поступают данные (в данном случае это цифры) и их нужно запихнуть в формулу.
Сервер
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
unit serv11;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Windows,
  Winsock, StdCtrls, ExtCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
 
  WSA:TWSAData;
  ss, cs1, cs2: TSocket;
  sa, ca1, ca2: TSockAddr;
  buf1, buf2, buf3: array[0..1024] of char;
  cas1, cas2:integer;
  ret1, ret2:integer;
  vBuf:string;
  vSize:integer;
  BufSize:integer;
// Переменные управления потоками
  hThr1,  hThr2 :Handle;
  dwThrId1, dwThrId2,
  dwThrPar1, dwThrPar2  :dword;
  F1, F2: boolean;
  a,b,c:integer;
  st:string;
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
      randomize;
      a:=random(10);
      buf1:=inttostr(a);
      label1.caption:=buf1;
      st:=buf3;
      label2.Caption:=st;
      //b:=strtoint(st);
      //c:=a+b;
      // label3.Caption:=inttostr(c);
end;
end.
на всякий случай код клиента
Клиент
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
unit cli2;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  ExtCtrls, Windows, Winsock;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Label3: TLabel;
    Label5: TLabel;
    Timer1: TTimer;
 
    procedure Button1Click(Sender: TObject);
    procedure Timer1StartTimer(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
  WSAData: TWSAData;
  ClientSocket: TSocket;
  ClientAddr: TSockAddr;
  Status, ret: Integer;
  Buf1,buf2: array[0..1024] of char;
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.Button1Click(Sender: TObject);
begin
     close;
     closesocket(ClientSocket);
     WSACleanup;
end;
 
procedure TForm1.Timer1StartTimer(Sender: TObject);
var
  result: boolean;
begin
   WSAStartup($101,WSAData);
  ClientSocket := socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
  if ClientSocket = INVALID_SOCKET then Halt(1);
  ClientAddr.sin_family := AF_INET;
  ClientAddr.sin_port := htons(1525);
  ClientAddr.sin_addr.S_addr := inet_addr('192.168.0.200');
  if connect(ClientSocket,ClientAddr,SizeOf(ClientAddr))= SOCKET_ERROR then
  begin
  result:=false;
  ShowMessage('Error');
  end
  else
  begin
  result:=true;
  ShowMessage('Well');
  end;
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 // ret:=recv(ClientSocket,buf1,sizeof(buf1),0);
 // label3.caption:=buf1;
     buf2:=Edit1.Text;
     label5.caption:=buf2;
     ret:=send(ClientSocket,buf2,sizeof(buf2),0);
end;
 
end.
0
210 / 169 / 24
Регистрация: 24.04.2012
Сообщений: 615
17.10.2012, 12:03 13
Настолько скромный, что в сервере нет функционала приема данных. )))
0
142 / 111 / 61
Регистрация: 01.08.2012
Сообщений: 297
17.10.2012, 12:17  [ТС] 14
Прощу прощения, не добавила 2-ю часть кода к серверу )))
Сервер часть 2
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
program Server11;
 
{$mode objfpc}{$H+}
 
uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Interfaces, // this includes the LCL widgetset
  Forms, serv11,  Winsock, Windows,   Dialogs
  { you can add units after this };
 
{$R *.res}
 
  function SocketThread1(LParam: LPARAM): dword; stdcall;
                             // Функция потока 1
  begin  { SocketThread1 }
     If LParam>0 then  begin end;
     Sleep(100);             // Пауза после инициализаци потока 0,1с
     cas1:=sizeof(ca1);
     cs1:=accept(ss, @ca1,@cas1);
      if cs1 = INVALID_SOCKET then ShowMessage ('cs1: INVALID_SOCKET')
      else
        begin
      Repeat
        begin  { РАБОТА }
          //send(cs1,buf1,sizeof(buf1),0);
          recv(cs1,buf3,sizeof(buf3),0);
          Sleep(1000);         // Пауза для других потоков
        end;   { РАБОТА }
      Until F1;               // F1=TRUE - условие останова
        end;
    Result:=0;                // Установка результата (формальность)
    ExitThread(0);            // Завершение работы потока
  end;   { SocketThread1 }
(* ---------------------------------------------------------------------------------- *)
 
function SocketThread2(LParam: LPARAM): dword; stdcall;
                           // Функция потока 2
begin  { SocketThread2 }
   If LParam>0 then  begin end;
   Sleep(100);             // Пауза после инициализаци потока 0,1с
   cas2:=sizeof(ca2);
   cs2:=accept(ss, @ca2,@cas2);
      if cs2 = INVALID_SOCKET then ShowMessage ('cs2: INVALID_SOCKET')
      else
        begin
    Repeat
      begin  { РАБОТА }
        send(cs2,buf2,sizeof(buf2),0);
        Sleep(1000);         // Пауза для других потоков
      end;   { РАБОТА }
    Until F2;               // F2=TRUE - условие останова
    end;
  Result:=0;                // Установка результата (формальность)
  ExitThread(0);            // Завершение работы потока
end;   { SocketThread2 }
(* ---------------------------------------------------------------------------------- *)
 
(* ================================================================================== *)
 
begin
(* ---------------------------------------------------------------------------------- *)
                             // Создание сокета сервера
  if WSAStartup($0101,WSA) <> 0 then Halt(1);
  ss:=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
  if ss = INVALID_SOCKET then Halt(1);
  FillChar(sa,SizeOf(TSockAddr),0);
  sa.sin_family:=AF_INET;
  sa.sin_port:=htons(1525);
  sa.sin_addr.S_addr:=INADDR_ANY;
  if bind(ss,sa,SizeOf(sa)) <> 0 then Halt(1);
  if listen(ss,SOMAXCONN) <> 0 then Halt(1);
(* ---------------------------------------------------------------------------------- *)
 
  dwThrId1:=1;               // Подготовка параметров потока 1
  dwThrPar1:=1;
  F1:=false;
  hThr1:=CreateThread(nil,0,@SocketThread1,@dwThrPar1,0,dwThrId1); // ЗАПУСК ПОТОКА 1
//  SetThreadPriority(hThr1,THREAD_PRIORITY_TIME_CRITICAL);            // +3 к приоритету
(* ---------------------------------------------------------------------------------- *)
 
  dwThrId2:=1;               // Подготовка параметров потока 2
  dwThrPar2:=1;
  F2:=false;
  hThr2:=CreateThread(nil,0,@SocketThread2,@dwThrPar2,0,dwThrId2); // ЗАПУСК ПОТОКА 2
 // SetThreadPriority(hThr2,THREAD_PRIORITY_HIGHEST);     // +2 к приоритету
(* ---------------------------------------------------------------------------------- *)
 
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
(* ---------------------------------------------------------------------------------- *)
 
  closesocket(ss);
  WSACleanup;
  CloseHandle(hThr1);   { Удаление манипулятора потока 1 }
  CloseHandle(hThr2);   { Удаление манипулятора потока 2 }
end.
0
210 / 169 / 24
Регистрация: 24.04.2012
Сообщений: 615
17.10.2012, 13:14 15
А где, если не секрет учат так писать? Вот вы по таймеру делаете сложение с переменной, которая должна прийти по сети, а где гарантия, что она придет до того, как ее прочтет таймер?

А вот этот код читает сокет каждую секунду.
recv(cs1,buf3,sizeof(buf3),0);
Sleep(1000);
Т.е. число в переменной, которое придет будет доступно только 1 секунду, дальше ее затрет буфер 0 длинны.

Короче нажимаете Del на всем проекте.
0
142 / 111 / 61
Регистрация: 01.08.2012
Сообщений: 297
17.10.2012, 13:49  [ТС] 16
Зачем язвить? Почему нельзя просто по человечески объяснить недочеты? Почему нельзя просто посоветовать как решить проблему? Да согласна я совсем забыла про таймер, что считывание каждую секунду, была сосредоточена на преобразовании типов. Спасибо, что обратили внимание на таймер. Не все такие умные как Вы.
Цитата Сообщение от Nutserus Посмотреть сообщение
Короче нажимаете Del на всем проекте.
А дальше что?
0
249 / 153 / 31
Регистрация: 07.10.2012
Сообщений: 401
17.10.2012, 14:01 17
А это он такой злой, потому что не может решить вашу проблему.
1
210 / 169 / 24
Регистрация: 24.04.2012
Сообщений: 615
17.10.2012, 14:08 18
А дальше возьмите пример клиент серверного приложения и решите на его основе свою задачу. Работать с тем кодом что у вас нельзя.
0
142 / 111 / 61
Регистрация: 01.08.2012
Сообщений: 297
17.10.2012, 14:14  [ТС] 19
Цитата Сообщение от Nutserus Посмотреть сообщение
Работать с тем кодом что у вас нельзя.
Обоснуйте или докажите. Подтвердите свои слова фактами
0
210 / 169 / 24
Регистрация: 24.04.2012
Сообщений: 615
17.10.2012, 14:38 20
А оно мне надо? )))
Этот код вы все равно сдернули откуда-то и кое как вставили в свой проект, поэтому не вижу проблемы положить на форму IdTCPServer и IdTCPClient и написать обработчик в 10 строк.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.10.2012, 14:38

Калькулятор, ошибка "Нельзя преобразовать тип char к integer"
По заданию, я должен написать калькулятор на паскале с использованием if. При выполнении выдается...

С помощью каких функций можно инициализировать порты com и usb?
Здравствуйте, подскажите с помощью каких функций можно инициализировать порты? Чтобы данные с...

Program1.pas(20) : Нельзя преобразовать тип IEnumerable<integer> к integer
выдает ошибку Program1.pas(20) : Нельзя преобразовать тип IEnumerable&lt;integer&gt; к integer пробовал...

Ошибка : Нельзя преобразовать тип array [1..8] of integer к integer
Дана целочисленная матрица В размером 5х8. Получить массив С из 0 и 1, в котором Ci=1, если в i –ой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.