Java中将long格式化成网卡地址
来源:互联网 发布:js 小数转整数 编辑:程序博客网 时间:2024/06/05 18:17
从I386上移植到PPC上,涉及到字节序的转换
发现原来的程序将网卡地址从buffer赋值给本地变量(代码里用一个64的长整形变量来记录mac地址ide )时没有进行字节序的转换,那么肯定是在显示时进行了转换,找到下面的代码:
一方面这个代码不够简洁,另外字节序的问题不应该在这里进行处理。所以我在从packet中取mac地址时就进行了字节序转换(一个原则就是把packet中的字段赋值给变量时一定要进行字节序的转换),所以在Java这边就不用关心字节序的问题,修改后的代码如下:
发现原来的程序将网卡地址从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();
}
{
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 );
}
{
// 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格式化成网卡地址
- 存储过程随机生成字符串、将long值格式化成字符串日期
- C#格式化成小数
- 数字格式化成货币格式 1000 格式化成1,000
- java获取服务器端网卡地址
- java获取服务器端网卡地址
- JAVA获得网卡MAC地址
- java程序获取网卡地址
- java获取服务器端网卡地址
- java 获得网卡MAC地址
- java如何获取网卡地址(硬件地址)
- java时间格式转换long->String
- java时间格式转换String->long
- js格式化成金额输出
- 格式化成财务类型数字
- 数字格式化成两位
- form 表单格式化成 对象
- JSON 格式化成视图模式
- 年会
- 如何使用资源文件
- 行业门户搜索引擎方案
- 手指与戒指
- C++中反向传播算法的简单实现
- Java中将long格式化成网卡地址
- C++中蚁群优化算法的实现
- 作为一个合格程序员每天该做的事
- 使OutLook最小化到托盘
- 将一个电脑加入域活动目录(Vbscript脚本语言)
- 2006年最失败的事,2007年必须做的事
- c#中静态成员与非静态成员的调用
- 意外关闭浏览器时弹出提示
- 智力题