点分十进制的IP地址转换成整型的算法是A*256^3+B*256^2+C*256+D,负数是怎么算出来的呢 想从其它数据库中读取整型IP地址,还原成点分十进制,可有的是负数,不知怎么得来的其中正直可以通过A*256^3+B*256^2+C*256+D算出来一开始还以为是32位有符号整型,可算出来的值不对请指教! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 unit Unit11;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm11 = class(TForm) edt1: TEdit; btn1: TButton; edt2: TEdit; btn2: TButton; procedure btn1Click(Sender: TObject); procedure btn2Click(Sender: TObject); procedure FormCreate(Sender: TObject); private function ip2Int(const strIP: string): Int64; function int2Ip(intIP: Int64): string; { Private declarations } public { Public declarations } end;var Form11: TForm11;implementation{$R *.dfm}function TForm11.int2Ip(intIP : Int64) : string;var n : int64;begin Result := ''; n := intIP shr 24; intIP := intIP xor (n shl 24); Result := IntToStr(n) + '.'; n := intIP shr 16; intIP := intIP xor (n shl 16); Result := Result + IntToStr(n) + '.'; n := intIP shr 8; intIP := intIP xor (n shl 8); Result := Result + IntToStr(n) + '.'; n := intIP; Result := Result + IntToStr(n);end;function TForm11.ip2Int(const strIP : string): Int64;var lst : TStringList; i : integer;begin result := 0; lst := TStringList.Create; try lst.Delimiter := '.'; lst.DelimitedText := strIP; for i := 0 to lst.Count - 1 do result := result + StrToInt64(lst[i]) shl (24 - i * 8); finally lst.Free; end;end;procedure TForm11.btn1Click(Sender: TObject);begin edt2.Text := IntToStr(ip2Int(edt1.Text));end;procedure TForm11.btn2Click(Sender: TObject);begin edt1.Text := int2Ip(StrToInt64(edt2.Text));end;procedure TForm11.FormCreate(Sender: TObject);begin edt1.Text := '192.168.1.1'; btn1.Click;end;end. int 转 uint的问题... 是不是负的有什么问题..我只在乎他在内存地址里面是什么值. 很简单,ip第一位大于128就是负数也就是32bit整数最高位是1。后面的数字的补码就是它的绝对值。 另外你要注意bigendian,那么是第四个字节。 新手问:ShowModal问题? 在DBGRID中如何画图 使用ADOConnection连接数据库时,显示“没有注册类别”是怎么回事? Socket客户端自动退出的问题 ADO联SQL Server的问题 版本问题 delphi初学者请教一个问题(如何向stringgrid中填入数据,并与数据库相连) 如何保存TTreeNode的信息 超级解霸2001压缩包的解压密码是多少呀? 使用TABLE时出现DATABASE是怎么办???? Sql Server查询分析器调用delphi的函数 有哪个组件是可以合并单元格且单元格是可以放图片的?
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm11 = class(TForm)
edt1: TEdit;
btn1: TButton;
edt2: TEdit;
btn2: TButton;
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
function ip2Int(const strIP: string): Int64;
function int2Ip(intIP: Int64): string;
{ Private declarations }
public
{ Public declarations }
end;var
Form11: TForm11;implementation{$R *.dfm}function TForm11.int2Ip(intIP : Int64) : string;
var
n : int64;
begin
Result := '';
n := intIP shr 24;
intIP := intIP xor (n shl 24);
Result := IntToStr(n) + '.'; n := intIP shr 16;
intIP := intIP xor (n shl 16);
Result := Result + IntToStr(n) + '.'; n := intIP shr 8;
intIP := intIP xor (n shl 8);
Result := Result + IntToStr(n) + '.'; n := intIP;
Result := Result + IntToStr(n);
end;function TForm11.ip2Int(const strIP : string): Int64;
var
lst : TStringList;
i : integer;
begin
result := 0;
lst := TStringList.Create;
try
lst.Delimiter := '.';
lst.DelimitedText := strIP; for i := 0 to lst.Count - 1 do
result := result + StrToInt64(lst[i]) shl (24 - i * 8);
finally
lst.Free;
end;
end;procedure TForm11.btn1Click(Sender: TObject);
begin
edt2.Text := IntToStr(ip2Int(edt1.Text));
end;procedure TForm11.btn2Click(Sender: TObject);
begin
edt1.Text := int2Ip(StrToInt64(edt2.Text));
end;procedure TForm11.FormCreate(Sender: TObject);
begin
edt1.Text := '192.168.1.1';
btn1.Click;
end;end.
我只在乎他在内存地址里面是什么值.
也就是32bit整数最高位是1。后面的数字的补码就是它的绝对值。