2012-02-17 64 views
49

Tôi đang cố gắng chuyển đổi một số từ số nguyên thành một số nguyên khác, nếu được in bằng hex, sẽ trông giống như số nguyên ban đầu.Java Chuyển đổi số nguyên thành số nguyên hex

Ví dụ:

Chuyển đổi 20-32 (đó là 0x20)

Chuyển đổi 54-84 (đó là 0x54)

+0

Bản sao có thể có của [Cách lấy giá trị hex từ số nguyên trong java] (http://stackoverflow.com/questions/5258415/how-to-get-hex-value-from-integer-in-java) – Vadzim

+0

I chỉ cần thực hiện ngay bây giờ để thực sự giải quyết các trường hợp thử nghiệm nhất định, nó là để chuyển đổi ** hex thành int **, không phải là cách khác xung quanh. Tuy nhiên, tiêu đề câu hỏi cho biết "Java Chuyển đổi số nguyên thành số nguyên hex" đã dẫn nhiều câu trả lời bao gồm cả của tôi và một trong những upvoted nhất để chuyển đổi ** int để hex **. – Wit

Trả lời

36
public static int convert(int n) { 
    return Integer.valueOf(String.valueOf(n), 16); 
} 

public static void main(String[] args) { 
    System.out.println(convert(20)); // 32 
    System.out.println(convert(54)); // 84 
} 

Đó là, đối xử với số lượng ban đầu như thể nó đã ở dạng thập lục phân, và sau đó chuyển đổi sang thập phân.

+3

Chuyển đổi từ 4 byte thành chuỗi, sau đó từ chuỗi thành int và sau đó thành hex? Không, cám ơn. –

+3

Giải pháp này là thiếu sót. Hãy thử chạy như sau: Integer.valueOf (String.valueOf (-2115381772), 16) - điều này trả về một NumberFormatException. – Lonzak

+0

Bạn là tuyệt vời –

4
String input = "20"; 
int output = Integer.parseInt(input, 16); // 32 
5

Bạn có thể thử một cái gì đó như thế này (theo cách mà bạn sẽ làm điều đó trên giấy):

public static int solve(int x){ 
    int y=0; 
    int i=0; 

    while (x>0){ 
     y+=(x%10)*Math.pow(16,i); 
     x/=10; 
     i++; 
    } 
    return y; 
} 

public static void main(String args[]){ 
    System.out.println(solve(20)); 
    System.out.println(solve(54)); 
} 

Đối với các ví dụ bạn đã cho điều này sẽ tính toán: 0 * 16^0 + 2 * 16^1 = 32 và 4 * 16^0 + 5 * 16^1 = 84

235

cách đơn giản nhất là sử dụng Integer.toHexString(int)

+3

Câu hỏi là để chuyển đổi từ số nguyên thành số nguyên , không phải số nguyên thành chuỗi. Vui lòng đọc lại câu hỏi. –

+34

Điều đó không có ý nghĩa mặc dù, bạn không thể kiểm soát đại diện nội bộ của số nguyên. Nếu bạn muốn một cái gì đó trong hex, bạn đang theo định nghĩa yêu cầu về một _human readable_ đại diện. – sircodesalot

+2

@sircodesalot: Câu hỏi đặt ra là tính toán một số nguyên với một thuộc tính nhất định _if_ được in dưới dạng hex, đây là một phép chuyển đổi thuần túy. Tôi mạnh mẽ không đồng ý với Jossef rằng câu trả lời phải được đánh dấu là chính xác dựa trên kết quả của google, nhưng theo phiếu bầu, tôi dường như là thiểu số. – Pianosaurus

1

sau đây là tối ưu khi và chỉ khi y Bạn chỉ muốn in biểu diễn hexa của số nguyên dương dương.

Nó phải rất nhanh vì nó chỉ sử dụng thao tác bit, giá trị utf-8 của ký tự ASCII và đệ quy để tránh đảo ngược số StringBuilder ở cuối.

public static void hexa(int num) { 
    int m = 0; 
    if((m = num >>> 4) != 0) { 
     hexa(m); 
    } 
    System.out.print((char)((m=num & 0x0F)+(m<10 ? 48 : 55))); 
} 
6

Một cách khác để chuyển đổi thành hex.

String s = String.format("%X", num);

Bạn có thể thay đổi vốn X-x cho chữ thường.

0

Đơn giản chỉ cần làm điều này:

public static int specialNum(num){ 

    return Integer.parseInt(Integer.toString(num) ,16) 
} 

Nó nên chuyển đổi bất kỳ số nguyên thập phân đặc biệt để đối thập lục phân.

Các vấn đề liên quan