原文網址:http://freewind886.blog.163.com/blog/static/661924642011810236100/
最近在做些與編解碼相關的事情,又遇到了byte和int的轉換,看着那些關於反碼、補碼的說明依舊頭疼,還是記下些實用的方法吧。
int -> byte
可以直接使用強制類型轉換: byte b = (byte) aInt;
這個操作是直接截取int中最低一個字節,如果int大於255,則值就會變得面目全非了。
對於通過InputStream.read()獲取的int,可采用這個方法將值還原。
byte -> int
這里有兩種情況,一種是要求保持值不變,例如進行數值計算,可采用強制類型轉換:int i = (int) aByte;
另一種是要求保持最低字節中各個位不變,3個高字節全部用0填充,例如進行編解碼操作,
則需要采用位操作:int i = b & 0xff;
int InputStream.read()
該函數返回一個int類型,范圍從0至255,如果到達流末尾,返回-1。通過ByteArrayInputStream的源碼可以看到是如何從byte轉到int
public synchronized int read() {
return (pos < count) ? (buf[pos++] & 0xff) : -1;
}
int <-> byte[]
代碼轉自:java int 與 byte轉換
public static byte[] toByteArray(int iSource, int iArrayLen) {
byte[] bLocalArr = new byte[iArrayLen];
for (int i = 0; (i < 4) && (i < iArrayLen); i++) {
bLocalArr[i] = (byte) (iSource >> 8 * i & 0xFF);
}
return bLocalArr;
}
// 將byte數組bRefArr轉為一個整數,字節數組的低位是整型的低字節位
public static int toInt(byte[] bRefArr) {
int iOutcome = 0;
byte bLoop;
for (int i = 0; i < bRefArr.length; i++) {
bLoop = bRefArr[i];
iOutcome += (bLoop & 0xFF) << (8 * i);
}
return iOutcome;
}
原文網址:http://zhidao.baidu.com/question/586106005.html
1、string 轉 byte[]
String str = "Hello";
byte[] srtbyte = str.getBytes();
2、byte[] 轉 string
byte[] srtbyte;
String res = new String(srtbyte);
System.out.println(res);
3、設定編碼方式相互轉換
String str = "hello";
byte[] srtbyte = null;
try {
srtbyte = str.getBytes("UTF-8");
String res = new String(srtbyte,"UTF-8");
System.out.println(res);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}