Java中将long格式化成网卡地址

原创 2007年02月10日 13:49:00
从I386上移植到PPC上,涉及到字节序的转换
发现原来的程序将网卡地址从buffer赋值给本地变量(代码里用一个64的长整形变量来记录mac地址ide )时没有进行字节序的转换,那么肯定是在显示时进行了转换,找到下面的代码:
    public static String MacLongToString(long macAddr)
    
{
        StringBuffer buf 
= new StringBuffer();
        
long l = (macAddr >> 32& 0xff;
        
if (l < 16)
            buf.append(
'0');
        buf.append(Long.toHexString(l));
        buf.append(
':');
        l 
= (macAddr >> 40& 0xff;
        
if (l < 16)
            buf.append(
'0');
        buf.append(Long.toHexString(l));
        buf.append(
':');
        l 
= macAddr & 0xff;
        
if (l < 16)
            buf.append(
'0');
        buf.append(Long.toHexString(l));
        buf.append(
':');
        l 
= (macAddr >> 8& 0xff;
        
if (l < 16)
            buf.append(
'0');
        buf.append(Long.toHexString(l));
        buf.append(
':');
        l 
= (macAddr >> 16& 0xff;
        
if (l < 16)
            buf.append(
'0');
        buf.append(Long.toHexString(l));
        buf.append(
':');
        l 
= (macAddr >> 24& 0xff;
        
if (l < 16)
            buf.append(
'0');
        buf.append(Long.toHexString(l));
        
return buf.toString();
    }

一方面这个代码不够简洁,另外字节序的问题不应该在这里进行处理。所以我在从packet中取mac地址时就进行了字节序转换(一个原则就是把packet中的字段赋值给变量时一定要进行字节序的转换),所以在Java这边就不用关心字节序的问题,修改后的代码如下:
    public static String MacLongToString(long macAddr)
    
{
        
// The format of macAddr has been converted to host order by C++
        return String.format("%1$02x:%2$02x:%3$02x:%4$02x:%5$02x:%6$02x",
                             (macAddr
>>40)&0xff, (macAddr>>32)&0xff,
                             (macAddr
>>24)&0xff, (macAddr>>16)&0xff,
                             (macAddr
>>8&0xff, (macAddr)&0xff );
    }

相关文章推荐

mac地址转换

#define mac_to_u64(mac) \ ()(((u64)mac[0] ((u64)mac[2] ((u64)mac[4] #define u64_to_mac(nu...

mac地址转换为长整形

最近工作中需要在网络中传递mac地址,需要将mac地址转换为六个字节,网上找了找资料,基本的思路就是用根据冒号将mac地址分为六段, 每段看做一个十六进制数,转化为十进制数后,分配赋值给六字节数组的每...

objective-c 回调函数

回调函数可以说是很有用的东西,刚接触object-c,回调函数自然需要重点研究下: 回调函数: 类A调用类B, 类B需要调用A中的某个函数 通常有两个步骤: - 回调函数注册   类A...

XCode4.2 SDK5 中缺少libz.1.2.X.dylib的错误

原文网址:http://blog.csdn.net/qianhen136/article/details/7423052 最近开发IOS,有的哥们用的是Xcode 3 ,有的用的Xcode4, ...

JAVA IP地址相关:用Java来获取访问者真实的IP地址,IP地址转化成long型数的算法 .

用Java来获取访问者真实的IP地址 在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了 Apache,Squi...

新浪旧事-JAVA之获取网卡物理地址

在JAVA中有时候会需要定位到某台电脑,而通过IP定位显然是不行的,有一种解决方案是通过定位到电脑的物理地址来定位电脑,这是本文要介绍的内容。     1. PhysicalAddressUtil ...
  • geloin
  • geloin
  • 2012年04月13日 09:18
  • 618

利用Java获取本机网卡的MAC地址

软件项目或者产品有时候会用到本机网卡的物理MAC地址,例如结合MAC地址进行登录验证等等,当然这种项目一般在局域网内运行,能相对提高系统的安全性。   下面列出了java读取MAC地址的工具方法,可...

Java/JSP获得客户端网卡MAC地址的三种方法解析(附:获得真实IP)

Java/JSP获得客户端网卡MAC地址的三种方法解析 从网上查找资料java/jsp获得客户端(IE)网卡MAC地址的方法大概有三种。 1、通过命令方式,在客户端执行Ipconfig 等...
  • cactusz
  • cactusz
  • 2017年07月06日 15:49
  • 142

java获取本机网卡的MAC地址

/**   * 与系统相关的一些常用工具方法.   *    * @author stephen   * @version 1.0.0   */  public class SystemTool { ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java中将long格式化成网卡地址
举报原因:
原因补充:

(最多只允许输入30个字)