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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.01.2012, 18:48   #1
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию [Pascal] символы\байты в число (IP в число)

А как в Паскале (fpc) преобразовать несколько байтов в одно число? Допустим IP адрес т.е. строку вида 178.70.100.8 в одну переменную типа ...э...longint? или integer?
В Си/С++ можно как-то так:
немного коряво, но смысл вроде понятен, собственно основная проблема с тем, что после второго комментария
Код:
	// string to bytes
	char strtype[4];
	string a = "110.70.10.90";
	string buf = a.substr(0, a.find("."));
	strtype[0] = atoi(buf.c_str());
	a.erase(0, a.find(".") + 1);
	buf = a.substr(0, a.find("."));
	strtype[1] = atoi(buf.c_str());
	a.erase(0, a.find(".") + 1);
	buf = a.substr(0, a.find("."));
	strtype[2] = atoi(buf.c_str());
	a.erase(0, a.find(".") + 1);
	strtype[3] = atoi(a.c_str());

	// bytes to int
	unsigned int ip = (strtype[0]<<24)|(strtype[1]<<16)|(strtype[2]<<8)|strtype[3];
	cout << ip;
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 20.01.2012 в 21:02.
Alex11223 вне форума Ответить с цитированием
Старый 20.01.2012, 20:51   #2
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Допустим IP адрес т.е. строку вида 178.70.100.8 в одну переменную типа ...э...longint? или integer?
Ни longint, ни integer, ни double, ни real, сто процентов.
Разве что разбить строку на 4 составляюшие и записать, извините, в запись.
Например так:
Код:
program Project1;
uses
  crt,sysutils;
type
  Tipadr=record
    a,b,c,d:integer;
  end;
var
  i,j:integer;
  IP:TIPadr;
  s:string;
  tmp:string;
begin
  clrscr;
  S:='178.70.100.8';
  tmp:='';
  j:=1;
  for i:=1 to length(S) do
    if s[i]='.' then
      begin
        case j of
          1:IP.a:=StrToInt(tmp);
          2:IP.b:=StrToInt(tmp);
          3:IP.c:=StrToInt(tmp);
        end;
        inc(j);
        tmp:=''
      end
    else
      tmp:=tmp+S[i];
  IP.d:=StrToInt(tmp);

  writeln(ip.a,'.',ip.b,'.',ip.c,'.',ip.d);
  readln
end.
Все тривиальное просто

Последний раз редактировалось whatever; 20.01.2012 в 20:55.
whatever вне форума Ответить с цитированием
Старый 20.01.2012, 20:57   #3
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну запись-то это понятно. Кстати, вроде byte же можно использовать в ней? Но неужели никак нельзя конвертировать айпи в одно число в Фри Паскале? В FPC кстати нет StrToInt и подобных.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 20.01.2012, 21:03   #4
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Ну запись-то это понятно. Кстати, вроде byte же можно использовать в ней? Но неужели никак нельзя конвертировать айпи в одно число в Фри Паскале? В FPC кстати нет StrToInt и подобных.
Я тоже так думал, но модуль sysutils решает :D

byte использовать можно.
Изображения
Тип файла: jpg Снимок2.JPG (69.3 Кб, 76 просмотров)
Все тривиальное просто
whatever вне форума Ответить с цитированием
Старый 21.01.2012, 01:12   #5
Step_UA
Форумчанин
 
Аватар для Step_UA
 
Регистрация: 09.06.2011
Сообщений: 388
По умолчанию

как вариант:
Код:
uses sysutils;
var IP:dword;
i,f:integer;
s:string;
begin
 s:='10.78.0.1';
 ip:=0;
 for i:=1 to 3 do
  begin
   f:=pos('.',s);
   ip:=(ip+strtoint(copy(s,1,f-1)))*256;
   delete(s,1,f)
  end;
 ip:=ip+strtoint(s);
end.
на неконкретные вопросы даю неконкретные ответы ...
Step_UA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Даны натуральное число n и символы s1,...,sn. Получите все символы, расположенные до первого двоеточия (Pascal) Татьана Помощь студентам 16 22.09.2011 15:05
натуральное число и символы Милашка:) Помощь студентам 9 16.01.2011 17:12
Даны натуральное число n и символы S1,…,Sn Zhasik Паскаль, Turbo Pascal, PascalABC.NET 1 30.12.2010 16:44
Дано число, вывести символы... Tiny Помощь студентам 5 11.03.2010 08:42
Как разбить число на цифрыКак разбить число на цифры: 3241 => 3,2,4,1 (Pascal) Banderas123 Помощь студентам 3 07.12.2009 18:26