很是奇怪,我把点分十进制的IP,接受窗体输入的。转成网络字节码,再把字节码转换成点分十进制的字符串,为什么会是反的呢,比如转换回来的结果是1.0.168.192。因为转换我是在循环里面做的,就是把一个网段的地址全转一次,在循环里面就要反,在外面用个button来一个IP转一下,就是对的,正的。procedure TForm1.Button3Click(Sender: TObject);
var IP1,IP2,tem,temp1:DWORD; i:DWORD;
sss:TStrings;
begin
tem:= htonl(ntohl(inet_addr(Pchar(Edit1.Text))));
temp1:= htonl(ntohl(inet_addr(Pchar(Edit2.Text))));
//ShowMessage(IntToStr(htonl(ntohl(inet_addr(Pchar(Edit2.Text))))));
//ShowMessage(IntToStr(tem));
//ShowMessage(inet_ntoa(in_addr(tem)));
while tem<=temp1 do
begin
Memo1.Lines.Add(inet_ntoa(in_addr(tem)));
Sleep(1000);
tem:=tem+1;
end;
{ //sss:=TStringList.Create;
IP1:=(ntohl(inet_addr(PChar(Edit1.Text))));
IP2:=(ntohl(inet_addr(PChar(Edit2.Text))));
for i:=IP1 to IP2 do
begin
//Memo1.Lines.Add(inet_ntoa(in_addr(i)));
ShowMessage(inet_ntoa(in_addr(IP1)));
Memo1.Lines.Add(inet_ntoa(in_addr(IP1)));
IP1:=IP1+1;
end; }
//Memo1.Lines.AddStrings(sss);
end;
var IP1,IP2,tem,temp1:DWORD; i:DWORD;
sss:TStrings;
begin
tem:= htonl(ntohl(inet_addr(Pchar(Edit1.Text))));
temp1:= htonl(ntohl(inet_addr(Pchar(Edit2.Text))));
//ShowMessage(IntToStr(htonl(ntohl(inet_addr(Pchar(Edit2.Text))))));
//ShowMessage(IntToStr(tem));
//ShowMessage(inet_ntoa(in_addr(tem)));
while tem<=temp1 do
begin
Memo1.Lines.Add(inet_ntoa(in_addr(tem)));
Sleep(1000);
tem:=tem+1;
end;
{ //sss:=TStringList.Create;
IP1:=(ntohl(inet_addr(PChar(Edit1.Text))));
IP2:=(ntohl(inet_addr(PChar(Edit2.Text))));
for i:=IP1 to IP2 do
begin
//Memo1.Lines.Add(inet_ntoa(in_addr(i)));
ShowMessage(inet_ntoa(in_addr(IP1)));
Memo1.Lines.Add(inet_ntoa(in_addr(IP1)));
IP1:=IP1+1;
end; }
//Memo1.Lines.AddStrings(sss);
end;
解决方案 »
- 点击按钮触发的消息问题
- 紧急求救!怎么控制SPCOMM不要接受硬件多次回来的所有数据,需要一条一条接收.
- edit 输入法
- ModelMaker 下设计类图的问题!!!!!!!
- sos:oracle 通过adoquery执行select ok,可是执行insert等提示:?
- 求助!急用!
- 请问那里可以买到专门讲OBJECT PASCAL 的书(非电子版),我有电子版的,但是眼睛受不了.新旧都行!谢谢
- D8快点出来!D7被vb.net、VC.net、 C#压下去了
- 想问一下,从TControls类继承下来的类如何添加“OnMouseDown”等标准事件?
- DELPHL+DSPACK开发播放器
- C#与ACCESS数据库的链接
- 向(kye_jufei)提問:Delphi如何根據cxgrid單元格中的數據動態自繪顔色???
htonl($04030201) ==> $01020304
inet_ntoa(network byte order ip value) => IP String
procedure TForm1.Button1Click(Sender: TObject);
var
T: DWORD;
begin
T := inet_addr('192.0.0.1');
Edit1.Text := IntToStr(T); T := inet_addr('192.0.1.2');
Edit2.Text := IntToStr(T);
end;procedure TForm1.Button2Click(Sender: TObject);
var
IP1,IP2,tem,temp1: DWORD;
sss: TStrings;
begin
tem:= htonl(StrToInt(Edit1.Text));
temp1:= htonl(StrToInt(Edit2.Text)); while tem <= temp1 do
begin
Memo1.Lines.Add(inet_ntoa(TInAddr(htonl(tem))));
Sleep(1000);
tem := tem+1;
end;
end;
procedure TForm1.Button4Click(Sender: TObject);
var IP1,IP2,i:DWORD;
begin
IP1:=ntohl(inet_addr(PChar(Edit1.Text)));
IP2:=ntohl(inet_addr(PChar(Edit2.Text)));
for i:=IP1 to IP2 do
begin
Memo1.Lines.Add(inet_ntoa(in_addr((htonl(i)))));
end;
end;SQLDebug_Fan说的对,按你说的先用htonl转换一下就行了。也谢谢unsigned。感谢两位。小弟新手,分不多。对不住了。有点算点吧