全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1974
推到 Plurk!
推到 Facebook!

inet_ntoa轉換回來的IP地址,為什麼是反的??

尚未結案
senven7
一般會員


發表:2
回覆:1
積分:0
註冊:2010-07-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-07-09 13:42:17 IP:113.141.xxx.xxx 訂閱
非常奇怪,用htonl(ntohl(inet_addr(Pchar(Edit1.Text))));轉換為IP字節碼,可是我要把IP字節碼再轉回點字符串時,就成反的了。而且很怪的是,一個IP的轉換不會反,我在一個循環裡面把一個IP段裡的字節碼地址全轉點字符地址就會全反,不知為什麼,在循環裡面不加htonl()就是反的,而加了htonl()就一直不斷循環下去。停不了。只有KILL進程。下面是代碼。大家幫我看看。是不是那裡沒對。


[code delphi]
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))); //此句都能正常輸出,可在循環裡面就是全反的 比如 1.0.168.192
while tem<=temp1 do
begin
Memo1.Lines.Add(inet_ntoa(in_addr(tem)));
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;

[/code]

h@visli
資深會員


發表:101
回覆:416
積分:418
註冊:2004-02-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-07-10 09:44:48 IP:113.92.xxx.xxx 未訂閱
如果我沒猜錯,您似乎對字節序沒搞清楚。
以下是改正的Code:

[code delphi]
tem:= ntohl(inet_addr(Pchar(Edit1.Text)));
temp1:= ntohl(inet_addr(Pchar(Edit2.Text)));
//ShowMessage(IntToStr(htonl(ntohl(inet_addr(Pchar(Edit2.Text))))));
//ShowMessage(IntToStr(tem));
ShowMessage(inet_ntoa(in_addr(htonl(tem)))); //此句都能正常輸出,可在循環裡面就是全反的 比如 1.0.168.192
while tem<=temp1 do
begin
Memo1.Lines.Add(inet_ntoa(in_addr(htonl(tem))));
tem:=tem 1;
end;

[/code]

------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
系統時間:2017-10-21 23:52:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!