网络序列和主机序列的转换

主机字节序不同的CPU有不同的字节序类型 这些字节序是指整数在内存中保存的顺序 这个叫做主机序。

最常见的有两种:

1. Little endian:将低序字节存储在起始地址

2. Big endian:将高序字节存储在起始地址

不用的主机有自己的存储选择方式,由CPU决定。

package 网络编程;

public class EndianChange {
//把字符串转换成网络字节序
public static Long ipW(String ip){
if(ip==null || ip.length()==0){
return null;
}
else if(ip.equals("0")){
return 0L;
}
long IPW = 0;
String[]ss = ip.trim().split("\\.");
if(ss.length != 4){
return 0L;
}
for(int i=0;i<4;i++){
IPW |= Long.parseLong(ss[i]) << ((i) * 8);
}
return IPW;
}

//把字符串ip转换成主机序
public static Long ipC(String ip){
if (ip == null || ip.length() == 0)
return null;
else if (ip.equals("0"))
return 0L;
long IPC = 0;
String[] ss = ip.trim().split("\\.");
if (ss.length != 4)
return 0L;
IPC |= Long.parseLong(ss[0]) << 24;
IPC |= Long.parseLong(ss[1]) << 16;
IPC |= Long.parseLong(ss[2]) << 8;
IPC |= Long.parseLong(ss[3]) << 0;
return IPC;
}

//把字符字节序的ip转换成字符串ip
public static String LinkW(Long ip) {
if (ip == null)
return "";
return ((ip >> 0) & 0x0ff) + "." + ((ip >> 8) & 0x0ff) + "." + ((ip >> 16) & 0x0ff) + "." + ((ip >> 24) & 0x0ff);
}

// 把主机字节序的ip专横字符串ip
public static String LinkC(Long ip) {
if (ip == null)
return "";
return ((ip >> 24) & 0x0ff) + "." + ((ip >> 16) & 0x0ff) + "." + ((ip >> 8) & 0x0ff) + "." + ((ip >> 0) & 0x0ff);
}
}
posted @ 2022-10-05 19:47  米酥Corn  阅读(57)  评论(0)    收藏  举报