जावा में दो अंकों के हेक्स का पूर्णांक


82

मुझे जावा में पूर्णांक मान को 2 अंकों के हेक्स मान में बदलने की आवश्यकता है। इसके लिए कोई रास्ता नहीं है। धन्यवाद

मेरी सबसे बड़ी संख्या 63 होगी और सबसे छोटी होगी 0. मैं छोटे मूल्यों के लिए एक अग्रणी शून्य चाहता हूं।


आपको इसे प्रिंट करने की आवश्यकता है? आपको इसे एक स्ट्रिंग में बदलने की आवश्यकता है?
अहमद मसूद

मैं फाइल में दो अंकों के हेक्स के रूप में
लिखूंगा

क्या आपने कम से कम इंटेगर जेवाडॉक की जाँच की है? आप 12345656 को 2-अंकीय हेक्स मान में बदलने की योजना कैसे बनाते हैं?
जेबी निज़ेट

जवाबों:


147
String.format("%02X", value);

आप का उपयोग करते हैं Xबजाय x के रूप में Aristar ने सुझाव दिया है, तो आप उपयोग की जरूरत नहीं है .toUpperCase()


8
यह वर्तमान में सबसे अच्छा जवाब है।
डेविड जे।

1
इस बात से सहमत हैं कि दूसरों की तुलना में बहुत बेहतर है। यह पूरी तरह से काम करता है। केवल एक चीज जो मैं सुझाऊंगा वह है विधि में दिए गए मापदंडों का थोड़ा अधिक विवरण। मुझे यह देखना था कि क्या मैं एक पूर्णांक या एक हेक्स स्ट्रिंग के रूप में मान पारित करता हूं।
JRSofty

31
Integer.toHexString(42);

Javadoc: http://docs.oracle.com/javase/6/docs/api/java/lang/Integer.html#toHexString(int)

ध्यान दें कि यह आपको 2 से अधिक अंक दे सकता है, हालांकि! (एक पूर्णांक 4 बाइट्स है, इसलिए आप संभावित रूप से 8 वर्ण वापस पा सकते हैं।)

जब तक आप पूरी तरह से एकल-बाइट मान (255 या उससे कम) के साथ काम कर रहे हैं, तब तक यह सुनिश्चित करने के लिए कि आपका पैडिंग प्राप्त करने के लिए एक हैक का एक सा है।

Integer.toHexString(0x100 | 42).substring(1)

जावा में शून्य के साथ बाएं पैडिंग पूर्णांक (गैर-दशमलव प्रारूप) में कई और (और बेहतर) समाधान ।


3
नाइस जीरो-पेडिंग हैक :)
ग्रोड्रिग्ज

1
आप बड़े मूल्यों के लिए एक ही तकनीक का उपयोग कर सकते हैं। यदि आप 2-बाइट मान तक पैडिंग करना चाहते हैं तो आप Integer.toHexString (0x10000 | value) .substring (1) कर सकते हैं। N हेक्स अंकों के लिए आप "1" के बाद N 0s को जोड़ते हैं। बेशक, आपके हेक्स मूल्य में एन अंकों से अधिक नहीं होना चाहिए।
user823981

28
String.format("%02X", (0xFF & value));    

7
क्या कोई समझा सकता है कि यह थोड़ा-सा समझदारी और 0xFF के साथ क्यों कर रहा है? यही कारण है कि SO पर उत्तर सिर्फ कोड नहीं होना चाहिए
चुपके रब्बी

4
OxFF & (बाइट) मान केवल हस्ताक्षरित बाइट को अहस्ताक्षरित करने के लिए परिवर्तित करें। (int) -1 = 0xFFFFFFFF, (int) (- 1 और 0xFf) = 0xFF
aristar

इस मामले में, "% 02X" प्रारूप के कारण बिट-वार और 0xFF आवश्यक नहीं है।
फ्रीक डे ब्रूजन

1
% 02X विनिर्देशक न्यूनतम दो अंकों को निर्दिष्ट करता है। यदि आप वास्तव में दो अंक (उच्चतर बिट्स को छोड़ना) चाहते हैं तो आपको बिटवाइज़ और
प्लग

यह जानने के लिए अच्छा है, इस अतिरिक्त जानकारी के लिए धन्यवाद!
कोशिश

14

का उपयोग करें Integer.toHexString()। यदि आप केवल एक अंक के साथ समाप्त होते हैं, तो एक अग्रणी शून्य के साथ पैड करना न भूलें। यदि आपका पूर्णांक 255 से अधिक है, तो आपको 2 से अधिक अंक मिलेंगे।

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();

2
क्या StringBuilderवास्तव में उपयोग एक सुधार है? pastebin.com/KyS06JMz
सिर्फ

4

यदि आपको केवल उन्हें यह प्रयास करने की आवश्यकता है:

for(int a = 0; a < 255; a++){
    if( a % 16 == 0){
        System.out.println();
    }
    System.out.printf("%02x ", a);
}

1

मैं हर बाइट के लिए अंतरिक्ष द्वारा अलग किए गए पूर्णांक के बराबर हेक्स मान का प्रतिनिधित्व करने के लिए एक स्ट्रिंग का उपयोग करता हूं EX: 4 बाइट्स में 260 की हेक्स वैल = 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));
}

0

गैब्रियलओशिरो के अनुसार, यदि आप चाहते हैं कि प्रारूप पूर्णांक 8 की लंबाई हो, तो यह प्रयास करें

String.format("0x%08X", 20) //print 0x00000014
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.