Delphi 中如何把IP地址和MAC地址转换成为整形数?

NetworkConfigurer 2016-01-28 11:01:17
现在要实现IP地址或者MAC地址排序。
想法是先把IP地址和MAC地址分别转换为整形数,然后和IP地址、MAC地址一起存入数据库,输出数据记录的时候根据IP地址和相应的整形数进行排序,请问,如何把IP地址和MAC地址分别转换成相对应的整形数?有相应的代码吗?

PS:在使用ADOQuery存储INT64这种数据时应该使用什么格式?我使用
例如 longmacInt_tmp为MAC转换后的长整形数,
ADOQuery1.filebyname('longMacInt').asInteger= longmacInt_tmp时出错,请问这是怎么回事?

请各位大侠帮帮忙,谢谢!
...全文
677 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
NetworkConfigurer 2016-06-01
  • 打赏
  • 举报
回复
引用 7 楼 lyhoo163 的回复:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Winsock;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


function HexToInt(str:string) : word;  // 16进制转10进制函数
var i , value : word;
    pos : word;
begin
  value:=0;
  pos:=length(str);
  for i:=1 to pos do
  begin
    case str[i] of
      'f','F': value := value*16+15;
      'e','E': Value := value*16+14;
      'd','D': value := value*16+13;
      'c','C': value := value*16+12;
      'b','B': value := value*16+11;
      'a','A': value := value*16+10;
      '0'..'9': value := value*16+ord(str[i])-ord('0');
    else
      result:=value;
      exit;
    end;
    result:=value;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  showMessage(Inttostr(HexToInt('ACD342FF'))); // 16进制转10进制
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  showMessage(Inttostr(inet_addr(pchar('192.168.1.120')))); // Ip转integer
end;

end.
明白了吗?
好的,谢谢您!
lyhoo163 2016-02-19
  • 打赏
  • 举报
回复

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Winsock;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


function HexToInt(str:string) : word;  // 16进制转10进制函数
var i , value : word;
    pos : word;
begin
  value:=0;
  pos:=length(str);
  for i:=1 to pos do
  begin
    case str[i] of
      'f','F': value := value*16+15;
      'e','E': Value := value*16+14;
      'd','D': value := value*16+13;
      'c','C': value := value*16+12;
      'b','B': value := value*16+11;
      'a','A': value := value*16+10;
      '0'..'9': value := value*16+ord(str[i])-ord('0');
    else
      result:=value;
      exit;
    end;
    result:=value;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  showMessage(Inttostr(HexToInt('ACD342FF'))); // 16进制转10进制
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  showMessage(Inttostr(inet_addr(pchar('192.168.1.120')))); // Ip转integer
end;

end.
明白了吗?
NetworkConfigurer 2016-02-18
  • 打赏
  • 举报
回复
引用 4 楼 qiankunbobo 的回复:
IP地址转换用inet_addr函数,该函数将一个点分十进制的IP转换成一个长整数型数 记住要引用Winsock单元
谢谢回复,如果是MAC地址呢?
babydog01 2016-02-16
  • 打赏
  • 举报
回复
还是字符比较安全,网卡的MAC前几位可以为0000。
qiankunbobo 2016-02-16
  • 打赏
  • 举报
回复
IP地址转换用inet_addr函数,该函数将一个点分十进制的IP转换成一个长整数型数 记住要引用Winsock单元
liups 2016-01-29
  • 打赏
  • 举报
回复
字符也可以排序
jjpweb 2016-01-29
  • 打赏
  • 举报
回复
AsFloat
lyhoo163 2016-01-29
  • 打赏
  • 举报
回复
IP和MAC都是字符类型,建议你使用字符型,保存在数据库中。 如果要转换成Int的话, 1、IP转成四个3位整数缀加,比如192.168.1.100转换成192168001100(不足3位补0) 2、MAC实质上是16位数,转换成10位数即可。

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧