有的時候忙著項目特別容易忘事,所以特此記錄
進制轉換
簡單轉換
int n1 = 14;
//十進制轉成十六進制:
Integer.toHexString(n1);
//十進制轉成八進制
Integer.toOctalString(n1);
//十進制轉成二進制
Integer.toBinaryString(12);
//十六進制轉成十進制
Integer.valueOf("FFFF",16).toString();
//十六進制轉成二進制
Integer.toBinaryString(Integer.valueOf("FFFF",16));
//十六進制轉成八進制
Integer.toOctalString(Integer.valueOf("FFFF",16));
//八進制轉成十進制
Integer.valueOf("576",8).toString();
//八進制轉成二進制
Integer.toBinaryString(Integer.valueOf("23",8));
//八進制轉成十六進制
Integer.toHexString(Integer.valueOf("23",8));
//二進制轉十進制
Integer.valueOf("0101",2).toString();
//二進制轉八進制
Integer.toOctalString(Integer.parseInt("0101", 2));
//二進制轉十六進制
Integer.toHexString(Integer.parseInt("0101", 2));
可以看到其他進制之間相互轉換,是先轉為10進制,然后再轉。
十進制轉任意進制(2-16)
public static String baseString(int num,int base){
if(base > 16){
throw new RuntimeException("進制數(shù)超出范圍,base<=16");
}
StringBuffer str = new StringBuffer("");
String digths ="0123456789ABCDEF";
Stack<Character> s = new Stack<Character>();
while(num != 0){
s.push(digths.charAt(num%base));
num/=base;
}
while(!s.isEmpty()){
str.append(s.pop());
}
return str.toString();
}
16內(nèi)任意進制間轉換
public static String baseNum(String num,int srcBase,int destBase){
if(srcBase == destBase){
return num;
}
String digths ="0123456789ABCDEF";
char[] chars = num.toCharArray();
int len = chars.length;
if(destBase != 10){//目標進制不是十進制 先轉化為十進制
num = baseNum(num,srcBase,10);
}else{
int n = 0;
for(int i = len - 1; i >=0; i--){
n+=digths.indexOf(chars[i])*Math.pow(srcBase, len - i - 1);
}
return n +"";
}
return baseString(Integer.valueOf(num),destBase);
}
字符串之間的轉換
字符串與整形
//字符串轉整形
int i = Integer.parseInt(str);
int i = Integer.valueOf(str).intValue();
//整形轉字符串
String str = String.valueOf ( intvalue );
String str = Integer.toString ( intvalue );
String s = "" + intvalue ;
字符串轉換成十六進制字符串
/**
* 字符串轉換成十六進制字符串
* @param String str 待轉換的ASCII字符串
* @return String 每個Byte之間空格分隔,如: [61 6C 6B]
*/
public static String str2HexStr(String str)
{
char[] chars = "0123456789ABCDEF".toCharArray();
StringBuilder sb = new StringBuilder("");
byte[] bs = str.getBytes();
int bit;
for (int i = 0; i < bs.length; i++)
{
bit = (bs[i] & 0x0f0) >> 4;
sb.append(chars[bit]);
bit = bs[i] & 0x0f;
sb.append(chars[bit]);
sb.append(' ');
}
return sb.toString().trim();
}
十六進制轉換字符串
/**
* 十六進制轉換字符串
* @param String str Byte字符串(Byte之間無分隔符 如:[616C6B])
* @return String 對應的字符串
*/
public static String hexStr2Str(String hexStr)
{
String str = "0123456789ABCDEF";
char[] hexs = hexStr.toCharArray();
byte[] bytes = new byte[hexStr.length() / 2];
int n;
for (int i = 0; i < bytes.length; i++)
{
n = str.indexOf(hexs[2 * i]) * 16;
n += str.indexOf(hexs[2 * i + 1]);
bytes[i] = (byte) (n & 0xff);
}
return new String(bytes);
}
bytes轉換成十六進制字符串
/**
* bytes轉換成十六進制字符串
* @param byte[] b byte數(shù)組
* @return String 每個Byte值之間空格分隔
*/
public static String byte2HexStr(byte[] b)
{
String stmp="";
StringBuilder sb = new StringBuilder("");
for (int n=0;n<b.length;n++)
{
stmp = Integer.toHexString(b[n] & 0xFF);
sb.append((stmp.length()==1)? "0"+stmp : stmp);
sb.append(" ");
}
return sb.toString().toUpperCase().trim();
}
bytes字符串轉換為Byte值
/**
* bytes字符串轉換為Byte值
* @param String src Byte字符串,每個Byte之間沒有分隔符
* @return byte[]
*/
public static byte[] hexStr2Bytes(String src)
{
int m=0,n=0;
int l=src.length()/2;
System.out.println(l);
byte[] ret = new byte[l];
for (int i = 0; i < l; i++)
{
m=i*2+1;
n=m+1;
ret[i] = Byte.decode("0x" + src.substring(i*2, m) + src.substring(m,n));
}
return ret;
}
String的字符串轉換成unicode的String
/**
* String的字符串轉換成unicode的String
* @param String strText 全角字符串
* @return String 每個unicode之間無分隔符
* @throws Exception
*/
public static String strToUnicode(String strText)
throws Exception
{
char c;
StringBuilder str = new StringBuilder();
int intAsc;
String strHex;
for (int i = 0; i < strText.length(); i++)
{
c = strText.charAt(i);
intAsc = (int) c;
strHex = Integer.toHexString(intAsc);
if (intAsc > 128)
str.append("\\u" + strHex);
else // 低位在前面補00
str.append("\\u00" + strHex);
}
return str.toString();
}
unicode的String轉換成String的字符串
/**
* unicode的String轉換成String的字符串
* @param String hex 16進制值字符串 (一個unicode為2byte)
* @return String 全角字符串
*/
public static String unicodeToString(String hex)
{
int t = hex.length() / 6;
StringBuilder str = new StringBuilder();
for (int i = 0; i < t; i++)
{
String s = hex.substring(i * 6, (i + 1) * 6);
// 高位需要補上00再轉
String s1 = s.substring(2, 4) + "00";
// 低位直接轉
String s2 = s.substring(4);
// 將16進制的string轉為int
int n = Integer.valueOf(s1, 16) + Integer.valueOf(s2, 16);
// 將int轉換為字符
char[] chars = Character.toChars(n);
str.append(new String(chars));
}
return str.toString();
}