Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.05.2022, 00:26   #11
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

А у меня все нормально.
Изображения
Тип файла: png 2022-05-07_00-22-05.png (42.9 Кб, 0 просмотров)
Тип файла: png 2022-05-07_00-24-37.png (44.5 Кб, 0 просмотров)
macomics вне форума Ответить с цитированием
Старый 07.05.2022, 00:37   #12
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Вам среда предоставляет такие мощные средства отладки, но вы мучаете форум ради простейшего цикла.

ADD: Тут ничего менять не надо
Код:
procedure TForm1.Button1.OnClick(Sender:TObject);
var
  i:integer;
  str: String;
begin
  str := Edit1.Text;
  i:=Length(str);
  while (i > 0) and (ord(str[i]) >= $30 ) and (ord(str[i]) <= $39 ) do dec(i);
  str := copy(str, i + 1, Length(str) - i);
  Form1.Caption := str;
  i:=strtoint(str);
end;
но после изменения надо привести к без знаковому типу (Byte)
Код:
procedure TForm1.Button1.OnClick(Sender:TObject);
var
  i:integer;
  str: String;
begin
  str := Edit1.Text;
  i:=Length(str);
  while (i > 0) and (Byte(ord(str[i]) - $30) < 10) do dec(i);
  str := copy(str, i + 1, Length(str) - i);
  Form1.Caption := str;
  i:=strtoint(str);
end;
но этот косяк поймать в отладчике можно за пару секунд.
Изображения
Тип файла: png 2022-05-07_00-32-37.png (49.0 Кб, 0 просмотров)

Последний раз редактировалось macomics; 07.05.2022 в 01:01.
macomics вне форума Ответить с цитированием
Старый 07.05.2022, 15:09   #13
AppData
Форумчанин
 
Регистрация: 20.09.2013
Сообщений: 246
По умолчанию

Огромное спасибо!
AppData вне форума Ответить с цитированием
Старый 07.05.2022, 15:20   #14
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Цитата:
Сообщение от AppData Посмотреть сообщение
хочу из вытащить из строки с ip адресом последние цифры
Как задачу поставишь такой результат и получишь. Я подозреваю, что вам нужна не последняя цифра, а конкретно номер порта.
Но вы получили то что просили. Строго последняя цифра, даже если это номер хоста.
Для получения именно значения номера порта этот алгоритм надо чуть дополнить (пара проверок типа str[i] = ':' и Length(str) - i > 0).

Последний раз редактировалось macomics; 07.05.2022 в 15:26.
macomics вне форума Ответить с цитированием
Старый 07.05.2022, 17:17   #15
AppData
Форумчанин
 
Регистрация: 20.09.2013
Сообщений: 246
По умолчанию

теперь не получается из-этого ип, удалить последние цифры и добавить туда свои.

скажем ип 10.11.12.15
а надо чтоб последний сменился на 20
10.11.12.20
AppData вне форума Ответить с цитированием
Старый 07.05.2022, 17:25   #16
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Цитата:
Сообщение от AppData Посмотреть сообщение
теперь не получается из-этого ип, удалить последние цифры и добавить туда свои.

скажем ип 10.11.12.15
а надо чтоб последний сменился на 20
10.11.12.20
inet_addr()
macomics вне форума Ответить с цитированием
Старый 07.05.2022, 17:37   #17
AppData
Форумчанин
 
Регистрация: 20.09.2013
Сообщений: 246
По умолчанию

macomics, нет, нет) не ип самого ПК а в Edit1.Text чтобы адрес отразился с другим ИП

скажем мой ип ПК 10.11.12.15 а в Edit1.Text должен он будет отразить 10.11.12.20
AppData вне форума Ответить с цитированием
Старый 07.05.2022, 18:06   #18
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Цитата:
The inet_addr function converts a string containing an IPv4 dotted-decimal address into a proper address for the IN_ADDR structure.
Функция inet_addr преобразует строку содержащую IPv4 адрес из десятичных цифр разделенных точками в соответствующий адрес заполняющий структуру IN_ADDR.
Код:
struct in_addr {
  union {
    struct {
      u_char s_b1;
      u_char s_b2;
      u_char s_b3;
      u_char s_b4;
    } S_un_b;
    struct {
      u_short s_w1;
      u_short s_w2;
    } S_un_w;
    u_long S_addr;
  } S_un;
};
inet_ntoa
Цитата:
The inet_ntoa function converts an (Ipv4) Internet network address into an ASCII string in Internet standard dotted-decimal format.
Функция inet_ntoa преобразует сетевой интернет адрес в строку стандартного формата представления десятичными цифрами разделенными точками.

ADD:
Код:
var
  str: String;
  sin: IN_ADDR;
begin
  str := '127.0.0.1';
  sin.S_addr := inet_addr(PChar(str));
  sin.S_un_b.s_b4 := 20;
  str := inet_ntoa(sin.S_addr);
  Caption := str;
end;
Функции описаны в модуле WinSock. Не забудьте проверить uses.

Последний раз редактировалось macomics; 07.05.2022 в 18:15.
macomics вне форума Ответить с цитированием
Старый 07.05.2022, 18:37   #19
AppData
Форумчанин
 
Регистрация: 20.09.2013
Сообщений: 246
По умолчанию

что то у меня не выходит, даже если PChar переделаю на PAnsiChar
Изображения
Тип файла: jpg Безымянный.jpg (42.3 Кб, 10 просмотров)
AppData вне форума Ответить с цитированием
Старый 07.05.2022, 18:42   #20
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Зажимаете Ctrl и кликаете на inet_addr, переходите к ее описанию в соответствующем модуле. Там будет тип данных, который надо указать.
Если окно автоподстанвки не надоедает постоянным выскакиванием, то можно нажать Ctrl+Пробел и там тоже будут все описания.

Последний раз редактировалось macomics; 07.05.2022 в 18:44.
macomics вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заменить последние цифры в IP на звездочки nibufep PHP 4 13.04.2015 14:48
Последние символы строки arshavin0230 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 04.10.2014 19:35
Дан двумерный массив. начиная с 1 строки сдвинуть все строки на 2 вниз, а последние 2 переместить на место первых двух строк. Proskurina Помощь студентам 5 03.03.2013 21:38
Найти степень числа N, у которой три последние цифры одинаковые. Vika_0_0 Паскаль, Turbo Pascal, PascalABC.NET 7 11.03.2012 10:24
Как вытащить последние 100 записей? vladtr SQL, базы данных 20 31.05.2010 09:30