IP地址的32位串是怎样写的呢?高手帮忙教教(50分)

  • 主题发起人 主题发起人 yeewa
  • 开始时间 开始时间
Y

yeewa

Unregistered / Unconfirmed
GUEST, unregistred user!
IP地址的32位串是怎样写的呢?
通过下面这个程序可以获得本机IP,本人用的是Delphi6
如本机IP为192.168.1.59,
得到十六进制的IP串为3B01A8C0,翻译成十进制为59.1.168.192
请问这个32位的IP串是倒过来写的吗?


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls, ExtCtrls, Winsock; //首先要添加winsock

type
TForm1 = class(TForm)
Timer1: TTimer;
Label1: TLabel;
PopupMenu1: TPopupMenu;
Exit: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Label1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure ExitClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
oldx,oldy: integer;//添加变量,用做移动窗体
oldIp: string;

implementation

{$R *.dfm}

//下面就是关键所在了
function LIP : string;
type
TaPInAddr = array [0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
phe : PHostEnt;
pptr : PaPInAddr;
Buffer : array [0..63] of char;
I : Integer;
GInitData : TWSADATA;
begin
WSAStartup($101, GInitData);
Result := '';
GetHostName(Buffer, SizeOf(Buffer));
phe :=GetHostByName(buffer);
if phe = nil then Exit;
pptr := PaPInAddr(Phe^.h_addr_list);
I := 0;
while pptr^ <> nil do begin
result:=result+#10+#13+'本机IP地址:'+StrPas(inet_ntoa(pptr^^));
result:=result+#10+#13+'本机32位IP串:'+inttohex(pptr^^.S_addr,2);
Inc(I);
end;
WSACleanup;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
with Label1 do //定义属性
begin
Caption:='';
Font.Charset:=ANSI_CHARSET;
Font.Name:='Arial';
Font.Size:=10;
Font.Color:=clRed;
Align:=alClient;
PopupMenu:=popupmenu1;
end;

Timer1.Interval:=1000;
Timer1.Enabled:=true;
Label1.Caption:='IP:'+LIP; //赋值,把ip赋值给label1
oldIp:=LIP;
BorderStyle:=bsNone;
Alphablend:=true; //呵呵,这个就是让窗口变的透明的办法了
Alphablendvalue:=200;
FormStyle:=fsStayOnTop; //让窗体总在最前面
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Label1.Caption :='IP:'+LIP;
if oldip <> LIP then
Showmessage('IP地址已经改变,请检查!');//提醒用户
end;

procedure TForm1.Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if ssleft in shift then //移动窗体form1
begin
Form1.Left:=Form1.Left+x-oldx;
Form1.Top:=Form1.top+y-oldy;
end;
end;

procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
oldx:=x;
oldy:=y;
end;

procedure TForm1.ExitClick(Sender: TObject);
begin
Close;
end;

end.
 
不是没人会吧?自己帮自己顶一下
 
网络顺序 本机顺序
我就只知道这么一点点
 
不是吧?等了半天来了这么一个回答?
高手跑哪去了????
 
晕啊,老是无人答啊?
问题不会很难挂??
 
惨,自己帮自己顶好辛苦啊
那位大哥帮忙答一下?OK?
 
完全晕倒
这么多人看了都无一个人答?
已经提供源程序了,无人能问明白吗?
大家帮帮忙,行了可以加分
 
192.168.0.59
3B01A8C0= 192 + 168*256 + 0*256*256 + 59*256*256*256

 
就是说这个32位串是倒过来写的吗????
 
直接用inet_ntoa函数吧.
 
请看清楚我的代码,已经使用了
while pptr^ <> nil do begin
result:=result+#10+#13+'本机IP地址:'+StrPas(inet_ntoa(pptr^^));
result:=result+#10+#13+'本机32位IP串:'+inttohex(pptr^^.S_addr,2);

我想问的是这个32位IP串是倒过来写的吗?就这么简单,为啥就没人答?
 
还是自己在顶,没人帮忙吗???
 
高手跑哪去了?>
 
大家帮帮忙吧!!
我也想知道!
 
[:(]看来结不了帖了
兄弟们帮帮忙
 
后退
顶部