Tôi cần thay đổi giá trị số nguyên thành giá trị hex gồm 2 chữ số trong Java. Có cách nào cho việc này không. Cảm ơn
Số lớn nhất của tôi sẽ là 63 và nhỏ nhất sẽ là 0. Tôi muốn một số 0 đứng đầu cho các giá trị nhỏ.
Tôi cần thay đổi giá trị số nguyên thành giá trị hex gồm 2 chữ số trong Java. Có cách nào cho việc này không. Cảm ơn
Số lớn nhất của tôi sẽ là 63 và nhỏ nhất sẽ là 0. Tôi muốn một số 0 đứng đầu cho các giá trị nhỏ.
Câu trả lời:
String.format("%02X", value);
Nếu bạn sử dụng X
thay vì x
theo gợi ý của Aristar thì bạn không cần sử dụng .toUpperCase()
.
Integer.toHexString(42);
Javadoc: http://docs.oracle.com/javase/6/docs/api/java/lang/Integer.html#toHexString(int)
Tuy nhiên, lưu ý rằng điều này có thể cung cấp cho bạn nhiều hơn 2 chữ số! (Một Số nguyên là 4 byte, vì vậy bạn có thể lấy lại 8 ký tự.)
Đây là một chút khó khăn để lấy phần đệm của bạn, miễn là bạn hoàn toàn chắc chắn rằng bạn chỉ xử lý các giá trị một byte (255 trở xuống):
Integer.toHexString(0x100 | 42).substring(1)
Nhiều giải pháp khác (và tốt hơn) tại Số nguyên đệm bên trái (định dạng không thập phân) với số không trong Java .
String.format("%02X", (0xFF & value));
Sử dụng Integer.toHexString()
. Đừng quên thêm một số 0 ở đầu nếu bạn chỉ kết thúc bằng một chữ số. Nếu số nguyên của bạn lớn hơn 255, bạn sẽ nhận được nhiều hơn 2 chữ số.
StringBuilder sb = new StringBuilder();
sb.append(Integer.toHexString(myInt));
if (sb.length() < 2) {
sb.insert(0, '0'); // pad with leading zero if needed
}
String hex = sb.toString();
StringBuilder
thực sự là một cải tiến? pastebin.com/KyS06JMz
tôi sử dụng điều này để nhận một chuỗi đại diện cho giá trị hex tương đương của một số nguyên được phân tách bằng dấu cách cho mỗi byte EX: hex val of 260 in 4 byte = 00 00 01 04
public static String getHexValString(Integer val, int bytePercision){
StringBuilder sb = new StringBuilder();
sb.append(Integer.toHexString(val));
while(sb.length() < bytePercision*2){
sb.insert(0,'0');// pad with leading zero
}
int l = sb.length(); // total string length before spaces
int r = l/2; //num of rquired iterations
for (int i=1; i < r; i++){
int x = l-(2*i); //space postion
sb.insert(x, ' ');
}
return sb.toString().toUpperCase();
}
public static void main(String []args){
System.out.println("hex val of 260 in 4 bytes = " + getHexValString(260,4));
}
Theo GabrielOshiro, Nếu bạn muốn định dạng số nguyên thành độ dài 8, hãy thử cách này
String.format("0x%08X", 20) //print 0x00000014