在Java中将long格式化成网卡地址的步骤

在Java中将long格式化成网卡地址的步骤

从I386上移植到PPC上,涉及到字节序的转换
发现原来的程序将网卡地址从buffer赋值给本地变量(代码里用一个64的长整形变量来记录mac地址ide )时没有进行字节序的转换,那么肯定是在显示时进行了转换,找到下面的代码:
在Java中将long格式化成网卡地址的步骤publicstaticStringMacLongToString(longmacAddr)
在Java中将long格式化成网卡地址的步骤在Java中将long格式化成网卡地址的步骤
{
在Java中将long格式化成网卡地址的步骤StringBufferbuf
=newStringBuffer();
在Java中将long格式化成网卡地址的步骤
longl=(macAddr>>32)&0xff;
在Java中将long格式化成网卡地址的步骤
if(l<16)
在Java中将long格式化成网卡地址的步骤buf.append(
'0');
在Java中将long格式化成网卡地址的步骤buf.append(Long.toHexString(l));
在Java中将long格式化成网卡地址的步骤buf.append(
':');
在Java中将long格式化成网卡地址的步骤l
=(macAddr>>40)&0xff;
在Java中将long格式化成网卡地址的步骤
if(l<16)
在Java中将long格式化成网卡地址的步骤buf.append(
'0');
在Java中将long格式化成网卡地址的步骤buf.append(Long.toHexString(l));
在Java中将long格式化成网卡地址的步骤buf.append(
':');
在Java中将long格式化成网卡地址的步骤l
=macAddr&0xff;
在Java中将long格式化成网卡地址的步骤
if(l<16)
在Java中将long格式化成网卡地址的步骤buf.append(
'0');
在Java中将long格式化成网卡地址的步骤buf.append(Long.toHexString(l));
在Java中将long格式化成网卡地址的步骤buf.append(
':');
在Java中将long格式化成网卡地址的步骤l
=(macAddr>>8)&0xff;
在Java中将long格式化成网卡地址的步骤
if(l<16)
在Java中将long格式化成网卡地址的步骤buf.append(
'0');
在Java中将long格式化成网卡地址的步骤buf.append(Long.toHexString(l));
在Java中将long格式化成网卡地址的步骤buf.append(
':');
在Java中将long格式化成网卡地址的步骤l
=(macAddr>>16)&0xff;
在Java中将long格式化成网卡地址的步骤
if(l<16)
在Java中将long格式化成网卡地址的步骤buf.append(
'0');
在Java中将long格式化成网卡地址的步骤buf.append(Long.toHexString(l));
在Java中将long格式化成网卡地址的步骤buf.append(
':');
在Java中将long格式化成网卡地址的步骤l
=(macAddr>>24)&0xff;
在Java中将long格式化成网卡地址的步骤
if(l<16)
在Java中将long格式化成网卡地址的步骤buf.append(
'0');
在Java中将long格式化成网卡地址的步骤buf.append(Long.toHexString(l));
在Java中将long格式化成网卡地址的步骤
returnbuf.toString();
在Java中将long格式化成网卡地址的步骤}

一方面这个代码不够简洁,另外字节序的问题不应该在这里进行处理。所以我在从packet中取mac地址时就进行了字节序转换(一个原则就是把packet中的字段赋值给变量时一定要进行字节序的转换),所以在Java这边就不用关心字节序的问题,修改后的代码如下:
在Java中将long格式化成网卡地址的步骤publicstaticStringMacLongToString(longmacAddr)
在Java中将long格式化成网卡地址的步骤在Java中将long格式化成网卡地址的步骤
{
在Java中将long格式化成网卡地址的步骤
//TheformatofmacAddrhasbeenconvertedtohostorderbyC++
在Java中将long格式化成网卡地址的步骤returnString.format("%1$02x:%2$02x:%3$02x:%4$02x:%5$02x:%6$02x",
在Java中将long格式化成网卡地址的步骤(macAddr
>>40)&0xff,(macAddr>>32)&0xff,
在Java中将long格式化成网卡地址的步骤(macAddr
>>24)&0xff,(macAddr>>16)&0xff,
在Java中将long格式化成网卡地址的步骤(macAddr
>>8)&0xff,(macAddr)&0xff);
在Java中将long格式化成网卡地址的步骤}