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地址转换为长整形

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

mac地址转换为长整形

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

使用js将long类型转化为"yyyy-MM-dd hh:mm:ss"日期格式&jQuery自带日历控件的汉化教程

使用js将long类型转化为"yyyy-MM-dd hh:mm:ss"日期格式&jQuery自带日历控件的汉化教程...
  • leixingbang1989
  • leixingbang1989
  • 2015年12月28日 10:17
  • 3408

java Data、String、Long三种日期类型之间的相互转换

以前做项目没遇到时间 、字符串、long型的三者之间的转化,最多也就两两转化,现在项目遇到了这么一个情况,感觉比较麻烦,但是呢再麻烦也得完成不,谁叫咱是苦逼的程序猿呢,经过百度加实践发现了他们之间互相...
  • msn465780
  • msn465780
  • 2014年03月29日 16:08
  • 11313

springMVC返回的json日期为Long的格式化

springMVC+myBatis查询数据,得到date类型数据,返回json日期为Long数字(毫秒数)的日期格式化方案...
  • u011385445
  • u011385445
  • 2015年10月30日 14:48
  • 2079

Java中long数据类型转化为float疑问解答

最为一个常识,我们都知道浮点型在内存中占用的是4个字节的空间,而long型占用的是8个字节的空间。可是为什么4个字节的float型的最大值会大于long型的最大值呢?   我们都知道,float类型...
  • zjkC050818
  • zjkC050818
  • 2017年04月19日 11:23
  • 860

Java中Long、String、Date 类型之间的转换

本文题材比较简单,仅仅作为自己的个人笔记,以备不时之需。今天拿到一个long类型的值,想要转化成Date类型,一时却想不起来,看样子记笔记还是必须的啊!(1)java.util.Date类型转换成lo...
  • ouyang111222
  • ouyang111222
  • 2015年08月31日 20:57
  • 22687

java long转换为int 类型 注意事项

public static int subDateFmtStr(String start, String end) { if (start == null || end == null) { ...
  • ying890
  • ying890
  • 2015年12月22日 16:24
  • 4793

用js将long型数据转换成date型或datetime型

数据库中存储的日期格式有date型(yyyy-MM-dd格式日期)与datetime型(yyyy-MM-dd 00:00:00格式日期),当用java程序将数据库中的日期数据传向前端时,若后台没有方法...
  • qq_29326717
  • qq_29326717
  • 2017年01月06日 15:50
  • 5880

long类型字段转换成varchar2类型

参考文档: How to Convert a Long to Varchar2 (文档 ID 228532.1) /*long类型字段转换成varchar2类型*/ --建表 create table...
  • ghostliming
  • ghostliming
  • 2015年12月27日 01:29
  • 4635
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java中将long格式化成网卡地址
举报原因:
原因补充:

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