पूर्णांक को हेक्साडेसिमल में परिवर्तित करें और फिर से वापस करें


461

मैं निम्नलिखित को कैसे बदल सकता हूं?

2934 (पूर्णांक) से B76 (हेक्स)

मुझे समझाने की कोशिश करो कि मैं क्या करने की कोशिश कर रहा हूं। मेरे डेटाबेस में उपयोगकर्ता आईडी हैं जो पूर्णांक के रूप में संग्रहीत हैं। उपयोगकर्ताओं को अपनी आईडी का संदर्भ देने के बजाय मैं उन्हें हेक्स मान का उपयोग करने देना चाहता हूं। मुख्य कारण यह छोटा है।

इसलिए न केवल मुझे पूर्णांक से हेक्स पर जाने की आवश्यकता है, बल्कि मुझे हेक्स से पूर्णांक तक भी जाने की आवश्यकता है।

क्या C # में ऐसा करने का एक आसान तरीका है?


65
FYI करें, आप न्यूमेरिक कीपैड उपयोगकर्ताओं को बंद कर देंगे।
डैनियल ए। व्हाइट

1
आपकी एक अच्छी बात है। लेकिन हम पूर्णांक आईडी को ऐसी चीज़ में बदलने की कोशिश कर रहे हैं जो कम वर्णों तक ले जाती है। इस जानकारी के लिए धन्यवाद।
कोडेट

एक फैशन के आधार पर प्रतिक्रिया, लेकिन क्या आपने किसी प्रकार के छोटे Integerकार्यान्वयन पर विचार किया है? यदि एकमात्र लक्ष्य उपयोगकर्ता आईडी को कम से कम संभव बनाना है, तो मुझे यह जानने में दिलचस्पी होगी कि क्या कोई अन्य स्पष्ट कारण है कि आपको विशेष रूप से हेक्साडेसिमल रूपांतरण की आवश्यकता क्यों है - जब तक कि मैं इसे याद नहीं करता। क्या यह स्पष्ट और ज्ञात है (यदि आवश्यक हो) कि उपयोगकर्ता आईडी वास्तव में वास्तविक मूल्य का एक हेक्साडेसिमल प्रतिनिधित्व है?
WynandB

1
@ कोड संख्या के रूप में संख्याओं को संचय करते समय सबसे कम जगह लेगा, जबकि अभी भी पढ़ने योग्य है। उदाहरण के लिए, 2bln (पूर्णांक) तक की संख्या के लिए 4 बाइट्स। या यदि यह किसी भी संख्यात्मक प्रकार के लिए बहुत लंबा है, तो एक बाइनरी फ़ील्ड का उपयोग करें।
ल्यूक

9
@ एलपी ओपी बताता है कि मेरे डेटाबेस में उपयोगकर्ता आईडी हैं जो पूर्णांक के रूप में संग्रहीत हैं। उपयोगकर्ताओं को अपनी आईडी का संदर्भ देने के बजाय मैं उन्हें हेक्स मान का उपयोग करने देना चाहता हूं। इसलिए कॉडेट मानों को एक इंट के रूप में संग्रहीत कर रहा है, लेकिन उपयोगकर्ता के लिए हेक्स से / में परिवर्तित हो रहा है।
18

जवाबों:


853
// Store integer 182
int intValue = 182;
// Convert integer 182 as a hex in a string variable
string hexValue = intValue.ToString("X");
// Convert the hex string back to the number
int intAgain = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);

से http://www.geekpedia.com/KB8_How-do-I-convert-from-decimal-to-hex-and-hex-to-decimal.html


179
आप का उपयोग करके अंकों की संख्या भी निर्दिष्ट कर सकते हैं: decValue.ToString ("X4")
मार्टिन

78
चूँकि इसका उल्लेख यहाँ नहीं किया गया है: यदि आप एक लोकेसेज़ x (उदाहरण के लिए ToString ("x4)) का उपयोग करते हैं, तो आपको एक लोअरकेस हेक्स मान (जैसे b76) मिलता है।
स्केली

14
क्या मैं केवल एक कठिन समय है जिसका नाम चर "decValue" है, क्योंकि यह एक दशमलव नहीं है? क्षमा करें, मुझे पता है कि यह किसी अन्य स्रोत से है, लेकिन स्टैकओवरफ्लो इससे बेहतर होना चाहिए।
क्रिस्टोफर बोनिट्ज

8
@bonitzenator योग्य, 6 वर्षों में यह उत्तर मौजूद है, मैंने कभी इस पर ध्यान नहीं दिया। अपडेट किया गया!
गैविन मिलर

1
ध्यान दें कि आपके हेक्स टू इंट सॉल्यूशन में हस्ताक्षर किए गए पूर्णांक और अधिकतम 8 हेक्स चार्ट का उत्पादन होगा।
स्कॉट सोमर

111

उपयोग:

int myInt = 2934;
string myHex = myInt.ToString("X");  // Gives you hexadecimal
int myNewInt = Convert.ToInt32(myHex, 16);  // Back to int again.

अधिक जानकारी और उदाहरणों के लिए देखें : कैसे करें: हेक्साडेसिमल स्ट्रिंग्स और न्यूमेरिक प्रकारों (C # प्रोग्रामिंग गाइड) के बीच कनवर्ट करें


60

इसे हेक्स में बदलने के लिए निम्नलिखित प्रयास करें

public static string ToHex(this int value) {
  return String.Format("0x{0:X}", value);
}

और फिर से वापस

public static int FromHex(string value) {
  // strip the leading 0x
  if ( value.StartsWith("0x", StringComparison.OrdinalIgnoreCase)) {
    value = value.Substring(2);
  }
  return Int32.Parse(value, NumberStyles.HexNumber);
}

बहुत निश्चित नहीं है कि मैं -1 का हकदार क्यों हूं, लेकिन मुझे लगता है कि मैंने किसी को नाराज कर दिया है।
जारेदपार

9
या "0x" बिट, जो कुछ ऐसा है जिसे ओपी वास्तव में नहीं चाहता था
फिलिप लेबेर्ट

3
मैंने प्रारूप वर्तनी को सही किया - लेकिन डाउनवोट नहीं किया। कोई स्पष्टीकरण के साथ downvotes मुझे भी क्रोधी बना ...
स्कॉट Ivey

@ फीलिप, शायद लेकिन यह एक बहुत ही मूर्खतापूर्ण बात लगती है, जिसके लिए उसे नीचा दिखाना पड़ता है। विशेष रूप से आधे जवाबों को ध्यान में रखते हुए मूल रूप से हेक्स -> इंट भाग
जेरेडपर

8
(मुझे पहले से ही खेद है कि मैंने टिप्पणी की)। सवाल था "मैं 2934 को B76 में कैसे बदलूं"। अन्य उत्तरों ने वास्तव में केवल आधे समाधान प्रदान किए, लेकिन आपके "2934" को "0xB76" में बदल दिया। यह बिल्कुल भी बुरा समाधान नहीं है, लेकिन यह उस सवाल का जवाब नहीं है जो पूछा गया था।
फिलिप लेबेर्ट

20
int valInt = 12;
Console.WriteLine(valInt.ToString("X"));  // C  ~ possibly single-digit output 
Console.WriteLine(valInt.ToString("X2")); // 0C ~ always double-digit output

19
string HexFromID(int ID)
{
    return ID.ToString("X");
}

int IDFromHex(string HexID)
{
    return int.Parse(HexID, System.Globalization.NumberStyles.HexNumber);
}

मैं वास्तव में इस के मूल्य पर सवाल उठाता हूं, हालांकि। आपको बताया गया है कि लक्ष्य को मूल्य कम करना है, जो यह होगा, लेकिन यह अपने आप में एक लक्ष्य नहीं है। आपका वास्तव में मतलब है कि या तो इसे याद रखना आसान है या टाइप करना आसान है।

यदि आपको याद रखना आसान है, तो आप एक कदम पीछे ले जा रहे हैं। हम जानते हैं कि यह अभी भी एक ही आकार का है, बस अलग-अलग एन्कोडेड है। लेकिन आपके उपयोगकर्ता यह नहीं जान पाएंगे कि अक्षर 'ए-एफ' तक ही सीमित हैं, और इसलिए आईडी उनके लिए उसी वैचारिक स्थान पर कब्जा कर लेगी, जैसे कि पत्र 'एज़' को अनुमति दी गई थी। इसलिए एक टेलीफोन नंबर याद रखने जैसा होने के बजाय, यह GUID (समतुल्य लंबाई) को याद रखने जैसा है।

यदि आपका मतलब टाइपिंग है, तो कीपैड का उपयोग करने में सक्षम होने के बजाय उपयोगकर्ता को अब कीबोर्ड के मुख्य भाग का उपयोग करना होगा। यह टाइप करने के लिए और अधिक कठिन होने की संभावना है, क्योंकि यह एक शब्द नहीं होगा जो उनकी उंगलियों को पहचानते हैं।

एक बेहतर विकल्प वास्तव में उन्हें वास्तविक उपयोगकर्ता नाम चुनने देना है।


लक्ष्य वास्तव में कम पात्रों को उठाना है। उदाहरण के लिए ट्विटर को लें जहां वे केवल १४० अक्षरों वाले संदेशों की अनुमति देते हैं। हम कुछ ऐसा ही कर रहे हैं ताकि हम अपने उपयोगकर्ताओं को अपनी उपयोगकर्ता आईडी को छोटा करने का एक तरीका दे सकें।
कोडेट

3
उस मामले में, आपको एक द्विआधारी प्रतिनिधित्व के बारे में सोचना चाहिए। यह संभवतया एक 32 बिट इंट है जो केवल नकारात्मक भाग का उपयोग नहीं करता है, जिसका अर्थ है 16 बिट्स रिज़ॉल्यूशन। आप आसानी से एक यूनिकोड चरित्र में डाल सकते हैं।
जोएल कोएहॉर्न

5
प्रतिक्रिया व्यक्त की, लेकिन - एक 32 बिट (हस्ताक्षरित) int जिसमें कभी ऋणात्मक संख्याएँ नहीं होती हैं, जिसमें रिज़ॉल्यूशन के 31 बिट्स होते हैं, 16 नहीं। आप इसे एक यूनिकोड वर्ण में रखने में सक्षम हो सकते हैं, लेकिन जब यह UTF8 एन्कोडेड होता है, जब तक कि यह 0 और 127 के बीच न हो। यह हेक्स समतुल्य से अधिक वर्ण लेने वाला है। HEX इस समस्या का एक भयानक समाधान नहीं है, लेकिन इंट में चार बाइट्स का एक आधार 64 भी कम होगा (और आप पेडिंग को ट्रिम कर सकते हैं)
जेम्स हार्ट

हाँ, मैं एक मस्तिष्क-मस्सा था। काश मैं कोई टिप्पणी संपादित कर पाता।
जोएल कोएहॉर्न

15

हेक्स के लिए:

string hex = intValue.ToString("X");

इंट करने के लिए:

int intValue = int.Parse(hex, System.Globalization.NumberStyles.HexNumber)

7

मैंने हेक्स स्ट्रिंग में इंट को परिवर्तित करने के लिए अपना स्वयं का समाधान बनाया और इससे पहले कि मुझे यह उत्तर मिले। आश्चर्य की बात नहीं, यह .net समाधान की तुलना में काफी तेज है क्योंकि कम कोड ओवरहेड है।

        /// <summary>
        /// Convert an integer to a string of hexidecimal numbers.
        /// </summary>
        /// <param name="n">The int to convert to Hex representation</param>
        /// <param name="len">number of digits in the hex string. Pads with leading zeros.</param>
        /// <returns></returns>
        private static String IntToHexString(int n, int len)
        {
            char[] ch = new char[len--];
            for (int i = len; i >= 0; i--)
            {
                ch[len - i] = ByteToHexChar((byte)((uint)(n >> 4 * i) & 15));
            }
            return new String(ch);
        }

        /// <summary>
        /// Convert a byte to a hexidecimal char
        /// </summary>
        /// <param name="b"></param>
        /// <returns></returns>
        private static char ByteToHexChar(byte b)
        {
            if (b < 0 || b > 15)
                throw new Exception("IntToHexChar: input out of range for Hex value");
            return b < 10 ? (char)(b + 48) : (char)(b + 55);
        }

        /// <summary>
        /// Convert a hexidecimal string to an base 10 integer
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        private static int HexStringToInt(String str)
        {
            int value = 0;
            for (int i = 0; i < str.Length; i++)
            {
                value += HexCharToInt(str[i]) << ((str.Length - 1 - i) * 4);
            }
            return value;
        }

        /// <summary>
        /// Convert a hex char to it an integer.
        /// </summary>
        /// <param name="ch"></param>
        /// <returns></returns>
        private static int HexCharToInt(char ch)
        {
            if (ch < 48 || (ch > 57 && ch < 65) || ch > 70)
                throw new Exception("HexCharToInt: input out of range for Hex value");
            return (ch < 58) ? ch - 48 : ch - 55;
        }

समय कोड:

static void Main(string[] args)
        {
            int num = 3500;
            long start = System.Diagnostics.Stopwatch.GetTimestamp();
            for (int i = 0; i < 2000000; i++)
                if (num != HexStringToInt(IntToHexString(num, 3)))
                    Console.WriteLine(num + " = " + HexStringToInt(IntToHexString(num, 3)));
            long end = System.Diagnostics.Stopwatch.GetTimestamp();
            Console.WriteLine(((double)end - (double)start)/(double)System.Diagnostics.Stopwatch.Frequency);

            for (int i = 0; i < 2000000; i++)
                if (num != Convert.ToInt32(num.ToString("X3"), 16))
                    Console.WriteLine(i);
            end = System.Diagnostics.Stopwatch.GetTimestamp();
            Console.WriteLine(((double)end - (double)start)/(double)System.Diagnostics.Stopwatch.Frequency);
            Console.ReadLine(); 
        }

परिणाम:

Digits : MyCode : .Net
1 : 0.21 : 0.45
2 : 0.31 : 0.56
4 : 0.51 : 0.78
6 : 0.70 : 1.02
8 : 0.90 : 1.25

1

शुद्ध रूपरेखा

बहुत अच्छी तरह से समझाया गया है और कुछ प्रोग्रामिंग लाइन्स GOOD JOB

// Store integer 182
int intValue = 182;
// Convert integer 182 as a hex in a string variable
string hexValue = intValue.ToString("X");
// Convert the hex string back to the number
int intAgain = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);

पास्कल >> सी #

http://files.hddguru.com/download/Software/Seagate/St_mem.pas

पुराने स्कूल से पास्कल की बहुत पुरानी प्रक्रिया सी में परिवर्तित

    /// <summary>
    /// Conver number from Decadic to Hexadecimal
    /// </summary>
    /// <param name="w"></param>
    /// <returns></returns>
    public string MakeHex(int w)
    {
        try
        {
           char[] b =  {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
           char[] S = new char[7];

              S[0] = b[(w >> 24) & 15];
              S[1] = b[(w >> 20) & 15];
              S[2] = b[(w >> 16) & 15];
              S[3] = b[(w >> 12) & 15];
              S[4] = b[(w >> 8) & 15];
              S[5] = b[(w >> 4) & 15];
              S[6] = b[w & 15];

              string _MakeHex = new string(S, 0, S.Count());

              return _MakeHex;
        }
        catch (Exception ex)
        {

            throw;
        }
    }

2
जवाब देने के लिए धन्यवाद। यदि संभव हो तो कृपया अंग्रेजी में अनुवाद करें जो आप कर सकते हैं। किसी भी संभावित व्याकरण की गलतियों के बारे में चिंता न करें, हम उन्हें सही करेंगे।
bcperth


-5

हेक्स के लिए int:

int a = 72;

Console.WriteLine ("{0: X}", ए);

हेक्स टू इंट:

int b = 0xB76;

Console.WriteLine (ख);

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.