网络序列和主机序列的转换
主机字节序不同的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);
}
}

浙公网安备 33010602011771号