2013-02-03 79 views
10

Tôi có một vấn đề nhỏ. Tôi có con số như 5421, -1 và 1. Tôi cần phải in chúng trong bốn byte, như:Java in bốn byte hệ thập lục phân số

5421 -> 0x0000152D 
-1 -> 0xFFFFFFFF 
1 -> 0x00000001 

Cũng số điểm, tôi đã nổi như 1.2, 58,654:

8.25f -> 0x41040000 
8.26 -> 0x410428f6 
0.7 -> 0x3f333333 

tôi cần chuyển đổi cả hai loại số thành phiên bản thập lục phân của chúng, nhưng chúng phải chính xác dài bốn byte (bốn cặp chữ số thập lục phân).

Có ai biết điều này có thể thực hiện được trong Java không? Hãy giúp tôi.

+0

Tôi đang bối rối. Biểu diễn hex của '8.25' phải là' 0x1.08p3', không phải '0x41040000'. Trong thực tế, '0x41040000' là số nguyên của hex 1090781184'. –

+0

Tôi có nó như là số fp IEEE754. – user35443

Trả lời

23

Dưới đây là hai chức năng, một cho số nguyên, một cho phao.

public static String hex(int n) { 
    // call toUpperCase() if that's required 
    return String.format("0x%8s", Integer.toHexString(n)).replace(' ', '0'); 
} 

public static String hex(float f) { 
    // change the float to raw integer bits(according to the OP's requirement) 
    return hex(Float.floatToRawIntBits(f)); 
} 
+1

Câu trả lời hay, cung cấp số 0 hàng đầu theo yêu cầu. –

+0

Điều gì về phao nổi? – user35443

+0

@ user35443 float là khác nhau, bạn có thể thêm mẫu cho phao nổi trong câu hỏi của bạn không? –

3

Sử dụng

String hex = Integer.toHexString(5421).toUpperCase(); // 152D 

Để nhận được với zero hàng đầu

String hex = Integer.toHexString(0x10000 | 5421).substring(1).toUpperCase(); 
+2

'System.out.println (Integer.toHexString (5421));' -> 152d –

+0

Tài liệu java nói rằng nó cung cấp mà không có số 0 đầu. –

+1

@SriHarshaChilakapati nhưng OP yêu cầu số không đứng đầu. –

4

Ở đây nó là dành cho nổi:

System.out.printf("0x%08X", Float.floatToRawIntBits(8.26f)); 
8

Đối với số nguyên, có một cách dễ dàng hơn. Sử dụng vốn 'X' nếu bạn muốn phần alpha của số hex là chữ hoa, nếu không hãy sử dụng 'x' cho chữ thường. '0' trong trình định dạng có nghĩa là giữ các số 0 đứng đầu.

public static String hex(int n) 
{ 
    return String.format("0x%04X", n); 
} 
Các vấn đề liên quan