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 );
    }

Java给定一个long值返回格式化日期样式

/** * 返回的字符串形式是形如:2013-10-20 20:58 * */ public static String formatTimeInMillis(long timeInMill...
  • zhangphil
  • zhangphil
  • 2015-02-13 15:34:26
  • 2940

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

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

格式化输出LONGLONG类型

LONGLONG其实就是int64类型,在winnt.h可以看到: typedef __int64 LONGLONG; 所以要想输出就要看__int64使用什么格式符了。通过查MSDN中,发现是:...
  • thanklife
  • thanklife
  • 2017-07-24 10:23:15
  • 588

实现MAC地址转换成十六进制

实现将mac地址(如:"00:FF:0A:0C:06:03")转换成十六进制存储的00FF0A0C0603 方法一: #include "stdio.h" #include "string.h"...
  • u013485792
  • u013485792
  • 2016-08-30 17:57:37
  • 9266

mac地址转换

#define mac_to_u64(mac) \ ()(((u64)mac[0] ((u64)mac[2] ((u64)mac[4] #define u64_to_mac(nu...
  • xhjcehust
  • xhjcehust
  • 2014-05-01 23:22:34
  • 1116

JAVA_MAC地址校验和转换

  • 2011年03月15日 19:57
  • 2KB
  • 下载

mac地址转换为长整形

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

long long 格式化

__int64 ltime=1404710506319,lDuration=14690;  CString strSql=_T(""); strSql.Format(_T("INSERT INTO...
  • pvlking
  • pvlking
  • 2014-07-29 09:19:18
  • 1919

JAVA时间格式化处理

  JAVA时间格式化处理日期格式化import java.util.Date; import java.text.SimpleDateFormat; class dayTime { public s...
  • wyp164
  • wyp164
  • 2007-05-25 18:57:00
  • 204742

java时间格式转化(毫秒 to 00:00)

public static String stringForTime(int timeMs, boolean isFull) {         int totalSeconds = timeMs ...
  • Zju_Jemery
  • Zju_Jemery
  • 2015-04-28 13:32:06
  • 1071
收藏助手
不良信息举报
您举报文章:Java中将long格式化成网卡地址
举报原因:
原因补充:

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