जावास्क्रिप्ट में दशमलव को हेक्साडेसिमल में कैसे बदलें


1479

आप जावास्क्रिप्ट मानों को दशमलव मानों को जावास्क्रिप्ट में कैसे परिवर्तित करते हैं?


7
बस यहाँ एक चेतावनी है कि आप एक स्ट्रिंग प्रतिनिधित्व से शुरू कर रहे हैं जब आप इसे हेक्स में परिवर्तित करने के भाग के रूप में संख्या में बदल देते हैं तो सटीक खोना बहुत आसान है। Danvk.org/wp/2012-01-20/… देखें ।
स्टूडेन्ज

यह फ़ंक्शन ठीक वही है जो आपको चाहिए
मोहम्मद मुसावी

जवाबों:


2473

संख्या को हेक्साडेसिमल स्ट्रिंग में बदलें:

hexString = yourNumber.toString(16);

और इसके साथ प्रक्रिया को उल्टा करें:

yourNumber = parseInt(hexString, 16);

42
yourNum इस मामले में एक हेक्स स्ट्रिंग है। जैसे (255) .toString (16) == 'ff' और& parseInt ('ff', 16) == 255
Prestaul

8
@forste, यदि आप एक जावास्क्रिप्ट संख्या (जो एक संख्या वस्तु है, जो ECMA स्क्रिप्ट में डबल है) को हेक्स और इस तकनीक का उपयोग करके वापस करने पर "ढीली परिशुद्धता" नहीं होगी। आपके द्वारा जोड़ा गया प्रश्न विशेष रूप से संख्याओं को डबल में फिट करने के लिए बहुत बड़ा है (इसलिए प्रश्न में स्ट्रिंग प्रतिनिधित्व)। अगर आपको नंबर मिला है तो यह काम करेगा। यदि आपके पास जावास्क्रिप्ट संख्या ऑब्जेक्ट (एक डबल) होने के लिए बहुत बड़ा है तो आपको कुछ और खोजना होगा।
प्रेस्टाटुल

12
@ डेरेक, मेरे पास एक मनोवैज्ञानिक मुद्दा है जो मुझे अनावश्यक कोष्ठक को सहन करने की अनुमति नहीं देगा ... @ हर कोई, yourNumberएक चर है। यदि आप एक संख्यात्मक शाब्दिक का उपयोग करना चाहते हैं, तो आपको कुछ करना होगा (45).toString(16), लेकिन यदि आप एक संख्या को हार्ड-कोडिंग कर रहे हैं, तो कृपया इसे केवल हेक्स स्ट्रिंग के रूप में लिखें ... (45).toString(16)हमेशा बराबर होगा '2d', इसलिए सीपीयू बर्बाद न करें यह पता लगाने के लिए चक्र।
प्रेस्टुल

21
@Prestaul "बाहर निकालने के लिए सीपीयू साइकिल बर्बाद न करें" - जिसे समयपूर्व अनुकूलन कहा जाता है। जब तक जावास्क्रिप्ट 286 पर चल रहा है, मुझे संदेह है कि ओवरहेड मामले। इसके अलावा, '45' एक जादूई संख्या हो सकती है जिसे प्रोग्रामर को पहचानने में सक्षम होना चाहिए (जैसे सेकंड में टाइमआउट अवधि), जबकि '2 डी', जो इसे पहचानने वाला है?
देजय क्लेटन

47
यदि आप कोष्ठक पसंद नहीं करते हैं, तो आप बस एक अतिरिक्त डॉट का उपयोग कर सकते हैं:42..toString(16)
थॉमस वाटसन

142

यदि आपको बिट फ़ील्ड या 32-बिट रंगों जैसी चीजों को संभालने की आवश्यकता है, तो आपको हस्ताक्षर किए गए नंबरों से निपटने की आवश्यकता है। जावास्क्रिप्ट फ़ंक्शन toString(16)एक नकारात्मक हेक्साडेसिमल संख्या लौटाएगा जो आमतौर पर वह नहीं है जो आप चाहते हैं। यह फ़ंक्शन इसे सकारात्मक संख्या बनाने के लिए कुछ पागल जोड़ देता है।

function decimalToHexString(number)
{
  if (number < 0)
  {
    number = 0xFFFFFFFF + number + 1;
  }

  return number.toString(16).toUpperCase();
}

console.log(decimalToHexString(27));
console.log(decimalToHexString(48.6));


5
क्या वह दो का पूरक है?
जूलियन

2
यह रूपांतरण आम तौर पर आवश्यक नहीं है क्योंकि जावास्क्रिप्ट सभी 32-बिट बिट फ़ील्ड को अहस्ताक्षरित संख्याओं के रूप में प्रस्तुत कर सकता है (संख्या देखें। MAX_SAFE_INTEGE)। इसी कारण से अहस्ताक्षरित में रूपांतरण के रूप में लिखा जा सकता है:number = 0x100000000 + number;
जोहान्स मटोकिक

3
मेरी पिछली टिप्पणी पर एक संक्षिप्त टिप्पणी: जबकि हेक्स प्रतिनिधित्व को Number.MAX_SAFE_INTEGER तक की संख्या के लिए काम करना चाहिए, यह बिटवाइज़ ऑपरेशंस के लिए नहीं है (जो कि अक्सर 32-बिट रंग बनाने के लिए उपयोग किया जाता है)। बिटवाइज़ ऑपरेशंस का परिणाम हमेशा एक हस्ताक्षरित 32-बिट पूर्णांक होता है। इसलिए बिटवाइज परिणाम> = 2 ^ 31 ऋणात्मक हैं और 0x100000000 | 0 === 0.
जोहान्स मटोकिक

25
आप >>>संख्या का उपयोग करने के लिए ऑपरेटर को अहस्ताक्षरित प्रतिनिधित्व जैसे ((-3253) >>> 0).toString(16)रिटर्न में परिवर्तित कर सकते हैं "fffff34b"
csharpfolk

1
+1एक उपयोगी जोड़ के लिए, लेकिन यदि आप संख्याओं को एक अलग संकेतन में परिवर्तित कर रहे हैं, तो सभी संख्याएं "आमतौर पर" पहले से ही सकारात्मक हैं, अन्यथा आप नकारात्मक परिणाम चाहते हैं।
कार्ल स्मिथ

82

नीचे दिए गए कोड दशमलव मान को हेक्साडेसिमल में बदल देंगे। यह आपको हेक्साडेसिमल परिणाम में पैडिंग जोड़ने की भी अनुमति देता है। तो 0 डिफ़ॉल्ट रूप से 00 हो जाएगा।

function decimalToHex(d, padding) {
    var hex = Number(d).toString(16);
    padding = typeof (padding) === "undefined" || padding === null ? padding = 2 : padding;

    while (hex.length < padding) {
        hex = "0" + hex;
    }

    return hex;
}

5
यह नकारात्मक मानों को ठीक से संभाल नहीं पाएगा। दशमलवटैक्स (-6, ४) ००-६ पर लौटेगा।
जॉनएमआर

3
इसमें फ्लोट्स की भी समस्या है, लेकिन Math.round () में डाल दिया गया है। (+ 1ed)
माइकल - जहां क्ले शिर्की

मैं एक सरणी ('255,0,55', आदि) और ".toString (16) से संख्या खींच रहा हूँ" (16) काम नहीं किया। मेरे पास जितने भी नंबर थे वही आ गए! मैंने "नंबर" फ़ंक्शन को सामने से जोड़ा, और अब यह काम करता है! समाधान खोजने की कोशिश में केवल चार घंटे बिताए !!
क्रिस्टोफेयर

65
function toHex(d) {
    return  ("0"+(Number(d).toString(16))).slice(-2).toUpperCase()
}

1
function hexRep(number, width) { return (number+Math.pow(16, precision)).toString(16).slice(-width); }
लोरी

2
ऐसा नहीं है कि इसे बढ़ाना कठिन है, आप पिछले अंकों को .slice (-number) से हटा रहे हैं। यदि आप सामने की ओर अधिक शून्य जोड़ते हैं तो यह ठीक काम करेगा।
7

19
ES6 const hex = d => Number(d).toString(16).padStart(2, '0')😁
निन्ह फाम

39

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

> (-1).toString(16)
"-1"

> ((-2)>>>0).toString(16)
"fffffffe"

हालांकि एक सीमा है: जावास्क्रिप्ट बिटवाइज़ ऑपरेटर अपने ऑपरेंड को 32 बिट्स के अनुक्रम के रूप में मानते हैं , अर्थात, आपको 32-बिट्स दो के पूरक मिलते हैं।


2
यह अब तक इस सवाल का सबसे मूल्यवान उत्तर है :)
अल्बर्टजन

सभी प्रश्नों के माध्यम से खुदाई क्योंकि C# number to hexadecimalविभिन्न परिणामों का उत्पादन किया गया था Javascript number to hexadecimal। ऐसा लगता है कि जावास्क्रिप्ट में नकारात्मक संख्याओं के साथ समस्या है। यह उत्तर समस्या का समाधान प्रतीत होता है।
गोअम्न

यह बड़े पैमाने पर सहायक था, धन्यवाद! मैं आरजीबी रंगों के लिए इसका उपयोग कर रहा था, इसलिए 24-बिट संस्करण प्राप्त करने के लिए, पहले दो पात्रों (अतिरिक्त FF) की काट -((-2)>>>0).toString(16).substring(2)
antonyh


19

लूप के बिना:

function decimalToHex(d) {
  var hex = Number(d).toString(16);
  hex = "000000".substr(0, 6 - hex.length) + hex;
  return hex;
}

// Or "#000000".substr(0, 7 - hex.length) + hex;
// Or whatever
// *Thanks to MSDN

यह भी बेहतर है कि लूप परीक्षणों का उपयोग न किया जाए जिनका मूल्यांकन किया जाना है?

उदाहरण के लिए, इसके बजाय:

for (var i = 0; i < hex.length; i++){}

है

for (var i = 0, var j = hex.length; i < j; i++){}

19

RGB-value-to-hexadecimal function के लिए इनमें से कुछ अच्छे विचारों को मिलाकर ( #HTML / CSS के लिए कहीं और जोड़ें ):

function rgb2hex(r,g,b) {
    if (g !== undefined)
        return Number(0x1000000 + r*0x10000 + g*0x100 + b).toString(16).substring(1);
    else
        return Number(0x1000000 + r[0]*0x10000 + r[1]*0x100 + r[2]).toString(16).substring(1);
}

इसके लिए धन्यवाद! मैंने बहुत समय पहले एक टिप्पणी छोड़ने का उल्लेख किया है। यह मेरे उत्तर की कुंजी थी। stackoverflow.com/questions/5560248/…
पिंप ट्राइज़किट

16

स्वीकृत उत्तर को ध्यान में नहीं रखा गया एकल अंक हेक्साडेसिमल कोड को लौटाता है। इसे आसानी से समायोजित किया जाता है:

function numHex(s)
{
    var a = s.toString(16);
    if ((a.length % 2) > 0) {
        a = "0" + a;
    }
    return a;
}

तथा

function strHex(s)
{
    var a = "";
    for (var i=0; i<s.length; i++) {
        a = a + numHex(s.charCodeAt(i));
    }

    return a;
}

मेरा मानना ​​है कि उपरोक्त उत्तर एक या दूसरे रूप में कई बार दूसरों द्वारा पोस्ट किए गए हैं। मैं इन्हें एक toHex () फ़ंक्शन में लपेटता हूं:

function toHex(s)
{
    var re = new RegExp(/^\s*(\+|-)?((\d+(\.\d+)?)|(\.\d+))\s*$/);

    if (re.test(s)) {
        return '#' + strHex( s.toString());
    }
    else {
        return 'A' + strHex(s);
    }
}

ध्यान दें कि संख्यात्मक नियमित अभिव्यक्ति आपके वेब अनुप्रयोगों की दक्षता में सुधार के लिए 10+ उपयोगी जावास्क्रिप्ट नियमित अभिव्यक्ति कार्यों से आई है

अद्यतन: इस चीज़ का परीक्षण करने के बाद कई बार मुझे एक त्रुटि मिली (RegExp में दोहरे उद्धरण), इसलिए मैंने यह तय किया। तथापि! काफी परीक्षण के बाद और अल्माज द्वारा पोस्ट को पढ़ने के बाद - मुझे एहसास हुआ कि मुझे काम करने के लिए नकारात्मक संख्या नहीं मिल सकती है।

इसके अलावा - मैंने इस पर कुछ पढ़ना शुरू किया और चूंकि सभी जावास्क्रिप्ट संख्या 64 बिट शब्दों के रूप में संग्रहीत हैं, चाहे जो भी हो - मैंने 64 बिट शब्द प्राप्त करने के लिए संख्या कोड को संशोधित करने की कोशिश की। लेकिन यह पता चला है कि आप ऐसा नहीं कर सकते। यदि आप "3.14159265" को एक संख्या में एक चर के रूप में रखते हैं - तो आप केवल "3" प्राप्त कर पाएंगे, क्योंकि भिन्नात्मक भाग केवल संख्या को दस (IE: 10.0) से गुणा करके बार-बार पहुंचता है। या उस दूसरे तरीके को लगाने के लिए - 0xF के हेक्साडेसिमल मान के कारण एक पूर्णांक में अनूदित होने से पहले फ्लोटिंग पॉइंट वैल्यू का अनुवाद किया जाता है जो अवधि के पीछे सब कुछ हटा देता है। एक पूरे के रूप में मान लेने के बजाय (यानी: 3.14159265) और 0xF मान के खिलाफ फ्लोटिंग पॉइंट वैल्यू का अनुमान लगाना।

तो इस मामले में, सबसे अच्छी बात यह है कि 3.14159265 को एक स्ट्रिंग में बदलना है और फिर स्ट्रिंग को परिवर्तित करना है। उपरोक्त के कारण, ऋणात्मक संख्याओं को परिवर्तित करना भी आसान हो जाता है क्योंकि मान के मोर्चे पर ऋण चिह्न केवल 0x26 हो जाता है।

तो मैंने जो किया वह यह निर्धारित करने पर था कि चर में एक संख्या है - बस इसे एक स्ट्रिंग में परिवर्तित करें और स्ट्रिंग को परिवर्तित करें। इसका मतलब यह है कि सर्वर साइड पर आपको आने वाली स्ट्रिंग को खोलना होगा और फिर आने वाली जानकारी को निर्धारित करना होगा। आप आसानी से संख्याओं के सामने "#" जोड़कर और पीछे आने वाले वर्ण स्ट्रिंग के सामने "A" को आसानी से कर सकते हैं। ToHex () फ़ंक्शन देखें।

मज़े करो!

एक और साल और बहुत सोच-विचार के बाद, मैंने फैसला किया कि "toHex" फ़ंक्शन (और मेरे पास "fromHex" फ़ंक्शन भी है) को वास्तव में सुधार करने की आवश्यकता है। पूरा सवाल था "मैं इसे और अधिक कुशलता से कैसे कर सकता हूं?" मैंने फैसला किया कि हेक्साडेसिमल फ़ंक्शन से ए / टू की परवाह नहीं की जानी चाहिए अगर कुछ एक भिन्नात्मक भाग है, लेकिन साथ ही यह सुनिश्चित करना चाहिए कि भिन्नात्मक भागों को स्ट्रिंग में शामिल किया गया है।

तो फिर सवाल बन गया, "आप कैसे जानते हैं कि आप एक हेक्साडेसिमल स्ट्रिंग के साथ काम कर रहे हैं?"। उत्तर सीधा है। मानक पूर्व-स्ट्रिंग जानकारी का उपयोग करें जो पहले से ही दुनिया भर में मान्यता प्राप्त है।

दूसरे शब्दों में - "0x" का उपयोग करें। तो अब मेरा toHex फ़ंक्शन यह देखने के लिए दिखता है कि क्या यह पहले से ही है और यदि यह है - यह सिर्फ उस स्ट्रिंग को वापस करता है जिसे इसे भेजा गया था। अन्यथा, यह स्ट्रिंग, संख्या, जो भी हो, को रूपांतरित करता है। यहाँ संशोधित टॉक्स फ़ंक्शन है:

/////////////////////////////////////////////////////////////////////////////
//  toHex().  Convert an ASCII string to hexadecimal.
/////////////////////////////////////////////////////////////////////////////
toHex(s)
{
    if (s.substr(0,2).toLowerCase() == "0x") {
        return s;
    }

    var l = "0123456789ABCDEF";
    var o = "";

    if (typeof s != "string") {
        s = s.toString();
    }
    for (var i=0; i<s.length; i++) {
        var c = s.charCodeAt(i);

        o = o + l.substr((c>>4),1) + l.substr((c & 0x0f),1);
    }

    return "0x" + o;
}

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

/////////////////////////////////////////////////////////////////////////////
//  fromHex().  Convert a hex string to ASCII text.
/////////////////////////////////////////////////////////////////////////////
fromHex(s)
{
    var start = 0;
    var o = "";

    if (s.substr(0,2).toLowerCase() == "0x") {
        start = 2;
    }

    if (typeof s != "string") {
        s = s.toString();
    }
    for (var i=start; i<s.length; i+=2) {
        var c = s.substr(i, 2);

        o = o + String.fromCharCode(parseInt(c, 16));
    }

    return o;
}

ToHex () फ़ंक्शन की तरह, fromHex () फ़ंक्शन पहले "0x" के लिए दिखता है और फिर यह आने वाली जानकारी को स्ट्रिंग में अनुवाद करता है यदि यह पहले से ही एक स्ट्रिंग नहीं है। मुझे नहीं पता कि यह कैसे एक स्ट्रिंग नहीं होगा - लेकिन सिर्फ मामले में - मैं जांच करता हूं। इसके बाद फ़ंक्शन दो वर्णों को पकड़कर और ASCII वर्णों में अनुवाद करता है। यदि आप चाहते हैं कि यह यूनिकोड का अनुवाद करे, तो आपको एक समय में लूप को चार (4) अक्षरों में बदलने की आवश्यकता होगी। लेकिन फिर आपको यह भी सुनिश्चित करना होगा कि स्ट्रिंग चार से विभाज्य नहीं है। यदि यह है - तो यह एक मानक हेक्साडेसिमल स्ट्रिंग है। (याद रखें कि स्ट्रिंग के सामने "0x" है।)

एक साधारण परीक्षण स्क्रिप्ट जो यह दर्शाती है कि -3.14159265, जब एक स्ट्रिंग में परिवर्तित की जाती है, अभी भी -3.14159265 है।

<?php

    echo <<<EOD
<html>
    <head><title>Test</title>
        <script>
            var a = -3.14159265;
            alert( "A = " + a );
            var b = a.toString();
            alert( "B = " + b );
        </script>
    </head>
    <body>
    </body>
</html>
EOD;

?>

क्योंकि किस तरह जावास्क्रिप्ट कार्य (स्ट्रिंग) फ़ंक्शन के संबंध में है, उन सभी समस्याओं को समाप्त किया जा सकता है जो पहले समस्याएं पैदा कर रहे थे। अब सभी तार और संख्या आसानी से परिवर्तित की जा सकती है। इसके अलावा, ऑब्जेक्ट के रूप में ऐसी चीजें जावास्क्रिप्ट द्वारा स्वयं उत्पन्न होने में त्रुटि का कारण बनेंगी। मेरा मानना ​​है कि यह जितना मिलता है उतना अच्छा है। केवल W3C के लिए बचा हुआ एकमात्र सुधार जावास्क्रिप्ट में एक toHex () और fromHex () फ़ंक्शन को शामिल करना है।


मुझे लगता है कि आपको अभी भी यहाँ काम करने को मिला है ... if( s.substr(0,2)इससे पहले if (typeof s != "string")कि आप जो चाहते हैं, वह नहीं है। जो मैं लौटा था वह वह नहीं था जिसकी मुझे या तो उम्मीद थी ( toHex(0x1f635)देता है "0x313238353635")। आगे जांच नहीं हुई।
रफ़िन

मेरा मानना ​​है कि आप गलत हैं। आपका उदाहरण एक हेक्स स्ट्रिंग का उपयोग कर रहा है जो एक स्ट्रिंग नहीं है - लेकिन एक संख्या। इसलिए 1f635 जिस तरह से है वह बाहर आ जाएगा। यदि आप "0x1f635" में डालते तो यह अलग तरह से सामने आता। (यानी: रूटीन ने आपके द्वारा रूटीन में भेजे गए हेक्स नंबर को वापस कर दिया होगा।) :-)
मार्क मैनिंग

पहला बिंदु यह था कि आप उपयोग नहीं कर सकते substrऔर toLowerCaseएक गैर-स्ट्रिंग पर ... इसलिए या तो typeofजल्द आने की जरूरत है, या, यदि आप toHexएक गैर-स्ट्रिंग पर फेंकने की उम्मीद करते हैं , तो आपको typeofपूरी तरह से चेक को हटा देना चाहिए । सही बात? यही है, अगर मैं बिना एडिट के यहां कोड का उपयोग करता हूं, और कहा जाता है toHex(0x1f635), तो मुझे मिलेगा Uncaught TypeError: s.substr is not a function। यदि मैं स्ट्रिंग कास्ट पहले चला जाता हूं, तो आप सही हैं, संख्या पहले दशमलव में, शायद, और चीजें बग़ल में जाती हैं। यदि sकोई स्ट्रिंग नहीं है, तो बेशक आप कौन सा सरल कास्ट कर सकते हैं ।
रफिन

दरअसल, XP के तहत यह ठीक काम करता है। जावास्क्रिप्ट के लिए कई अपडेट हुए हैं जो जावास्क्रिप्ट को टाइपकास्ट कर रहे हैं। जो एक अपवाद फेंक देंगे। XP के तहत यह ज्यूसर काम करता है। कम से कम मेरे लिए। टाइपकास्ट दुनिया में - "अगर (टाइपो s ==" स्ट्रिंग "&& s.substr (0,2) ==" 0x ") {रिटर्न एस;}" डालना उचित है। लेकिन ox1f635 अभी भी एक स्ट्रिंग नहीं है। :-)
मार्क मैनिंग 16

12
var number = 3200;
var hexString = number.toString(16);

16 मूलांक है और हेक्साडेसिमल संख्या में 16 मान हैं :-)


12

रुचि रखने वाले किसी भी व्यक्ति के लिए, यहाँ JSFiddle ने इस प्रश्न के अधिकांश उत्तरों की तुलना की है

और यहाँ विधि मैं समाप्त हो रहा है के साथ जा रहा है:

function decToHex(dec) {
  return (dec + Math.pow(16, 6)).toString(16).substr(-6)
}

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

उदाहरण के लिए ( JSFiddle ):

let c = 4210330 // your color in decimal format
let rgb = [(c & 0xff0000) >> 16,  (c & 0x00ff00) >> 8,  (c & 0x0000ff)]

// Vanilla JS:
document..getElementById('some-element').style.color = 'rgb(' + rgb + ')'
// jQuery:
$('#some-element').css('color', 'rgb(' + rgb + ')')

यह #some-elementCSS colorसंपत्ति सेट करता है rgb(64, 62, 154)


10

निर्धारित वर्णों के लिए विवश / गद्देदार:

function decimalToHex(decimal, chars) {
    return (decimal + Math.pow(16, chars)).toString(16).slice(-chars).toUpperCase();
}

2
यह एक संख्या को एक स्ट्रिंग हेक्स और पैड में परिवर्तित करता है जो शून्य को अग्रणी करता है, यह सुंदर है!
गॉर्डन

10

यहाँ ECMAScript 6 संस्करण को छाँटा गया है:

const convert = {
  bin2dec : s => parseInt(s, 2).toString(10),
  bin2hex : s => parseInt(s, 2).toString(16),
  dec2bin : s => parseInt(s, 10).toString(2),
  dec2hex : s => parseInt(s, 10).toString(16),
  hex2bin : s => parseInt(s, 16).toString(2),
  hex2dec : s => parseInt(s, 16).toString(10)
};

convert.bin2dec('111'); // '7'
convert.dec2hex('42');  // '2a'
convert.hex2bin('f8');  // '11111000'
convert.dec2bin('22');  // '10110'

@HypersoftSystems के साथ मजबूत असहमति में, यदि आपका वातावरण या स्थिति आपको प्रभावित करती है, तो ES6 का उपयोग करें। प्रत्येक स्क्रिप्ट को लीगेसी बूटलेग दुभाषियों में चलाने की आवश्यकता नहीं है, बेबल भी एक कारण से मौजूद है। और अंत में, ES6 अधिक सुपाठ्य है यदि आप इसे जानते हैं। कहा कि मानक JS उत्तर देने से अधिक लोगों को मदद मिल सकती है, लेकिन पुराने JS संस्करणों के लिए अन्य उत्तर देने पर विचार करना, ES6 का उत्तर देना केवल फायदेमंद है, "यह है कि मैंने इसे दिन में वापस कैसे किया" रेंट निश्चित रूप से आवश्यक नहीं है।
वाईआर

Opinons तथ्य नहीं बनाते हैं, इसलिए आपका "तर्क" अमान्य है। @ WiR3D
हाइपरसॉफ्ट सिस्टम्स

@HypersoftSystems यह आपके जैसा ही मान्य है यदि ऐसा नहीं है, क्योंकि आपका विचार केवल एक संदर्भ के रूप में है और यह उस संदर्भ को सीमित करता है जो संभवतः अधिकांश आधुनिक अनुप्रयोगों में अमान्य है।
वाईआर

उपयोगकर्ता त्रुटि: "बस के रूप में", "शायद" और "सबसे अधिक"।
हाइपरसॉफ्ट सिस्टम्स

9
function dec2hex(i)
{
  var result = "0000";
  if      (i >= 0    && i <= 15)    { result = "000" + i.toString(16); }
  else if (i >= 16   && i <= 255)   { result = "00"  + i.toString(16); }
  else if (i >= 256  && i <= 4095)  { result = "0"   + i.toString(16); }
  else if (i >= 4096 && i <= 65535) { result =         i.toString(16); }
  return result
}

1
+1 धन्यवाद! CSS के साथ काम करते समय, toString (16) महत्वपूर्ण है ताकि आपको FF0000 जैसे परिणाम
मिलें

7
जब सीएसएस (या svg के साथ काम करते हैं, जो सीएसएस शैली के रंग विनिर्देशों को स्वीकार करता है) तो आप पूरे मुद्दे को लिख सकते हैं color: rgb(r,g,b)जहां rg और b दशमलव संख्या हैं।
11

1
होना चाहिए:function decimalToHexString(i) { var result = "00"; if (i >= 0 && i <= 15) { result += "000" + i.toString(16); } else if (i >= 16 && i <= 255) { result += "00" + i.toString(16); } else if (i >= 256 && i <= 4095) { result += "0" + i.toString(16); } else if (i >= 4096 && i <= 65535) { result += i.toString(16); } return result }
Aykut ikevik

9

यदि आप एक आरजीबीए रंग मान के हेक्साडेसिमल प्रतिनिधित्व के लिए एक संख्या को परिवर्तित करना चाहते हैं, तो मैंने इसे यहां से कई युक्तियों का सबसे उपयोगी संयोजन पाया है:

function toHexString(n) {
    if(n < 0) {
        n = 0xFFFFFFFF + n + 1;
    }
    return "0x" + ("00000000" + n.toString(16).toUpperCase()).substr(-8);
}

8

AFAIK टिप्पणी 57807 गलत है और कुछ इस तरह होनी चाहिए: var hex = Number (d) .toString (16); var hex = parseInt के बजाय (d, 16);

function decimalToHex(d, padding) {
    var hex = Number(d).toString(16);
    padding = typeof (padding) === "undefined" || padding === null ? padding = 2 : padding;

    while (hex.length < padding) {
        hex = "0" + hex;
    }

    return hex;
}

6

और यदि संख्या ऋणात्मक है?

यहाँ मेरा संस्करण है।

function hexdec (hex_string) {
    hex_string=((hex_string.charAt(1)!='X' && hex_string.charAt(1)!='x')?hex_string='0X'+hex_string : hex_string);
    hex_string=(hex_string.charAt(2)<8 ? hex_string =hex_string-0x00000000 : hex_string=hex_string-0xFFFFFFFF-1);
    return parseInt(hex_string, 10);
}

5

मैं एक बहुत बड़े लूप में हेक्स स्ट्रिंग में रूपांतरण कर रहा हूं, इसलिए मैंने सबसे तेज़ खोजने के लिए कई तकनीकों की कोशिश की। मेरी आवश्यकताओं के परिणामस्वरूप एक निश्चित लंबाई वाली स्ट्रिंग थी, और नकारात्मक मानों को ठीक से एन्कोड किया (-1 => ff..f)।

.toString(16)जब से मुझे नकारात्मक मानों को ठीक से एन्कोडेड करने की आवश्यकता थी, सरल ने मेरे लिए काम नहीं किया। निम्नलिखित कोड 1-2 बाइट मानों पर अब तक का परीक्षण किया गया सबसे तेज है (ध्यान दें कि symbolsजो आउटपुट प्रतीकों की संख्या को आप प्राप्त करना चाहते हैं, जो 4-बाइट पूर्णांक के लिए यह 8 के बराबर होनी चाहिए) को परिभाषित करता है:

var hex = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];
function getHexRepresentation(num, symbols) {
    var result = '';
    while (symbols--) {
        result = hex[num & 0xF] + result;
        num >>= 4;
    }
    return result;
}

यह .toString(16)1-2 बाइट संख्याओं की तुलना में तेज़ी से प्रदर्शन करता है और बड़ी संख्याओं पर धीमा होता है (जब symbols> = 6), लेकिन फिर भी उन तरीकों को बेहतर बनाना चाहिए जो नकारात्मक मूल्यों को ठीक से एनकोड करते हैं।


5

जैसा कि स्वीकृत उत्तर बताता है, दशमलव से हेक्साडेसिमल में बदलने का सबसे आसान तरीका है var hex = dec.toString(16)। हालाँकि, आप एक स्ट्रिंग रूपांतरण जोड़ना पसंद कर सकते हैं, क्योंकि यह सुनिश्चित करता है कि स्ट्रिंग प्रतिनिधित्व "12".toString(16)सही तरह से काम करता है।

// Avoids a hard-to-track-down bug by returning `c` instead of `12`
(+"12").toString(16);

प्रक्रिया को उलटने के लिए आप नीचे दिए गए समाधान का भी उपयोग कर सकते हैं, क्योंकि यह और भी छोटा है।

var dec = +("0x" + hex);

यह Google Chrome और Firefox में धीमा प्रतीत होता है, लेकिन ओपेरा में काफी तेज है। Http://jsperf.com/hex-to-dec देखें ।


5

जावास्क्रिप्ट में दशमलव को हेक्साडेसिमल में कैसे बदलें

मैं हेक्साडेसिमल रूपांतरण के लिए एक क्रूर रूप से साफ / सरल दशमलव को खोजने में सक्षम नहीं था, जिसमें कार्यों और सरणियों की गड़बड़ी शामिल नहीं थी ... इसलिए मुझे इसे अपने लिए बनाना पड़ा।

function DecToHex(decimal) { // Data (decimal)

    length = -1;    // Base string length
    string = '';    // Source 'string'

    characters = [ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' ]; // character array

    do { // Grab each nibble in reverse order because JavaScript has no unsigned left shift

        string += characters[decimal & 0xF];   // Mask byte, get that character
        ++length;                              // Increment to length of string

    } while (decimal >>>= 4); // For next character shift right 4 bits, or break on 0

    decimal += 'x'; // Convert that 0 into a hex prefix string -> '0x'

    do
        decimal += string[length];
    while (length--); // Flip string forwards, with the prefixed '0x'

    return (decimal); // return (hexadecimal);
}

/* Original: */

D = 3678;    // Data (decimal)
C = 0xF;    // Check
A = D;        // Accumulate
B = -1;        // Base string length
S = '';        // Source 'string'
H = '0x';    // Destination 'string'

do {
    ++B;
    A& = C;

    switch(A) {
        case 0xA: A='A'
        break;

        case 0xB: A='B'
        break;

        case 0xC: A='C'
        break;

        case 0xD: A='D'
        break;

        case 0xE: A='E'
        break;

        case 0xF: A='F'
        break;

        A = (A);
    }
    S += A;

    D >>>= 0x04;
    A = D;
} while(D)

do
    H += S[B];
while (B--)

S = B = A = C = D; // Zero out variables
alert(H);    // H: holds hexadecimal equivalent

5
ओह माय ... यह वास्तव में भयानक है, ऐसा करने का भयानक तरीका, यहां तक ​​कि बदसूरत कोडिंग शैली में भी किया जाता है। ईमानदारी से: लाइन ब्रेक और इंडेंटेशन में क्या गलत है? एकल अक्षर चर? वास्तव में?
विक्टर श्रोडर

1
इसे संशोधित किया। क्या यह रास्ता भयानक है? और क्या शैली बेहतर है ?? मैंने मूल रूप से सोचा था कि हर एक कदम "अक्षरशः" के साथ समझना आसान होगा, जैसे अक्षरों के साथ ... कभी-कभी मैं बहुत बेवकूफ हो सकता हूं
जॉनक्लाइस्केलर

4
क्षमा करें, हाँ, अभी भी भयानक है। आपका कोड अभी भी बहुत सारे अकुशल लूप का उपयोग करता है और अन्य मुद्दों के बीच वैश्विक नाम स्थान को प्रदूषित कर रहा है। एक कार्य जो एक साधारण फ़ंक्शन कॉल द्वारा पूरा किया जा सकता है, उसके लिए दृष्टिकोण ही ओवरकिल है। यदि आप JS में अपनी कोडिंग शैली को बेहतर बनाना चाहते हैं, तो मैं दृढ़ता से सुझाव देता हूं कि आप w3.org/wiki/JavaScript_best_practices और google.github.io/styleguide/javascriptideide.xml जैसी पठन सामग्री पर जाएं । बस विषय के बारे में गूगल।
विक्टर श्रोडर

1
मैंने क्रोम में गति परीक्षण किया और मेरा ओवरकिल कार्य .toString (16) की तुलना में लगभग 30% अधिक तेज है, जबकि फ़ायरफ़ॉक्स में मेरा कार्य .toString (16) की तुलना में 40% धीमा है ... क्रोम साबित करता है कि मेरे अत्यधिक लूप कुशल हैं। ब्राउज़र की तुलना में देशी .toString (16) फ़ंक्शन, जबकि फ़ायरफ़ॉक्स साबित करता है कि अधिक लोग क्रोम को क्यों पसंद करते हैं। या कि पीछे है ?? एक दिन क्रोम भी तेजी से अद्यतन हो सकता है। .StString (16) मुझे दोनों मामलों में गलत बनाता है! किसी भी तरह से मैं पूरी तरह से गलत नहीं हूं, और आपका पूरी तरह से सही नहीं है। मेरा अहंकार हालांकि, मुझे आपकी बात कम से कम 30% लगती है। ;)
जोनलिकस्केलरेल

2
आपको कभी भी एकल वर्णों वाले स्ट्रिंग की एक सरणी घोषित करने की आवश्यकता नहीं है। बस एक चरित्र स्ट्रिंग की घोषणा करें। आप वर्गाकार कोष्ठकों का उपयोग करके एक स्ट्रिंग से एक पात्र प्राप्त कर सकते हैं, जैसा कि आप एक सरणी के साथ करेंगे।
डेविड स्पेक्टर

3

इसे पूरा करने के लिए;

function toHex(i, pad) {

  if (typeof(pad) === 'undefined' || pad === null) {
    pad = 2;
  } 

  var strToParse = i.toString(16);

  while (strToParse.length < pad) {
    strToParse = "0" + strToParse;
  }

  var finalVal =  parseInt(strToParse, 16);

  if ( finalVal < 0 ) {
    finalVal = 0xFFFFFFFF + finalVal + 1;
  }

  return finalVal;
}

हालांकि, अगर आपको इसे अंत में एक पूर्णांक (यानी रंगों के लिए) में बदलने की आवश्यकता नहीं है, तो बस यह सुनिश्चित करना कि मान नकारात्मक नहीं हैं, पर्याप्त होना चाहिए।


2

मुझे कोई स्पष्ट उत्तर नहीं मिला है, बिना जांच के कि अगर यह नकारात्मक या सकारात्मक है, तो दो पूरक (नकारात्मक संख्या शामिल) का उपयोग करता है। उसके लिए, मैं एक बाइट के लिए अपना समाधान दिखाता हूं:

((0xFF + number +1) & 0x0FF).toString(16);

आप इस निर्देश का उपयोग किसी भी नंबर बाइट्स में कर सकते हैं, केवल आप FFसंबंधित स्थानों पर जोड़ सकते हैं। उदाहरण के लिए, दो बाइट्स के लिए:

((0xFFFF + number +1) & 0x0FFFF).toString(16);

यदि आप स्ट्रिंग हेक्साडेसिमल के लिए एक सरणी पूर्णांक बनाना चाहते हैं:

s = "";
for(var i = 0; i < arrayNumber.length; ++i) {
    s += ((0xFF + arrayNumber[i] +1) & 0x0FF).toString(16);
}

2

यदि आप 'पूर्ण' जावास्क्रिप्ट या सीएसएस प्रतिनिधित्व में बदलना चाहते हैं, तो आप कुछ इस तरह का उपयोग कर सकते हैं:

  numToHex = function(num) {
    var r=((0xff0000&num)>>16).toString(16),
        g=((0x00ff00&num)>>8).toString(16),
        b=(0x0000ff&num).toString(16);
    if (r.length==1) { r = '0'+r; }
    if (g.length==1) { g = '0'+g; }
    if (b.length==1) { b = '0'+b; }
    return '0x'+r+g+b;                 // ('#' instead of'0x' for CSS)
  };

  var dec = 5974678;
  console.log( numToHex(dec) );        // 0x5b2a96


1

यदि आप बड़े पूर्णांक अर्थात संख्याओं को संख्या से अधिक खोज रहे हैं। नंबर। MAX_SAFE_INTEGER - 9007199254740991, तो आप निम्न कोड का उपयोग कर सकते हैं

const hugeNumber = "9007199254740991873839" // Make sure its in String
const hexOfHugeNumber = BigInt(hugeNumber).toString(16);
console.log(hexOfHugeNumber)


1

यह Prestaul और टॉड के समाधान पर आधारित है। हालांकि, यह एक सामान्यीकरण है जो एक चर के आकार के लिए भिन्न होता है (जैसे कि माइक्रोकंट्रोलर सीरियल लॉग से पार्स हस्ताक्षरित मूल्य)।

function decimalToPaddedHexString(number, bitsize)
{ 
  let byteCount = Math.ceil(bitsize/8);
  let maxBinValue = Math.pow(2, bitsize)-1;

  /* In node.js this function fails for bitsize above 32bits */
  if (bitsize > 32)
    throw "number above maximum value";

  /* Conversion to unsigned form based on  */
  if (number < 0)
    number = maxBinValue + number + 1;

  return "0x"+(number >>> 0).toString(16).toUpperCase().padStart(byteCount*2, '0');
}

टेस्ट स्क्रिप्ट:

for (let n = 0 ; n < 64 ; n++ ) { 
     let s=decimalToPaddedHexString(-1, n); 
     console.log(`decimalToPaddedHexString(-1,${(n+"").padStart(2)}) = ${s.padStart(10)} = ${("0b"+parseInt(s).toString(2)).padStart(34)}`);
   }

परीक्षण के परिणाम:

decimalToPaddedHexString(-1, 0) =        0x0 =                                0b0
decimalToPaddedHexString(-1, 1) =       0x01 =                                0b1
decimalToPaddedHexString(-1, 2) =       0x03 =                               0b11
decimalToPaddedHexString(-1, 3) =       0x07 =                              0b111
decimalToPaddedHexString(-1, 4) =       0x0F =                             0b1111
decimalToPaddedHexString(-1, 5) =       0x1F =                            0b11111
decimalToPaddedHexString(-1, 6) =       0x3F =                           0b111111
decimalToPaddedHexString(-1, 7) =       0x7F =                          0b1111111
decimalToPaddedHexString(-1, 8) =       0xFF =                         0b11111111
decimalToPaddedHexString(-1, 9) =     0x01FF =                        0b111111111
decimalToPaddedHexString(-1,10) =     0x03FF =                       0b1111111111
decimalToPaddedHexString(-1,11) =     0x07FF =                      0b11111111111
decimalToPaddedHexString(-1,12) =     0x0FFF =                     0b111111111111
decimalToPaddedHexString(-1,13) =     0x1FFF =                    0b1111111111111
decimalToPaddedHexString(-1,14) =     0x3FFF =                   0b11111111111111
decimalToPaddedHexString(-1,15) =     0x7FFF =                  0b111111111111111
decimalToPaddedHexString(-1,16) =     0xFFFF =                 0b1111111111111111
decimalToPaddedHexString(-1,17) =   0x01FFFF =                0b11111111111111111
decimalToPaddedHexString(-1,18) =   0x03FFFF =               0b111111111111111111
decimalToPaddedHexString(-1,19) =   0x07FFFF =              0b1111111111111111111
decimalToPaddedHexString(-1,20) =   0x0FFFFF =             0b11111111111111111111
decimalToPaddedHexString(-1,21) =   0x1FFFFF =            0b111111111111111111111
decimalToPaddedHexString(-1,22) =   0x3FFFFF =           0b1111111111111111111111
decimalToPaddedHexString(-1,23) =   0x7FFFFF =          0b11111111111111111111111
decimalToPaddedHexString(-1,24) =   0xFFFFFF =         0b111111111111111111111111
decimalToPaddedHexString(-1,25) = 0x01FFFFFF =        0b1111111111111111111111111
decimalToPaddedHexString(-1,26) = 0x03FFFFFF =       0b11111111111111111111111111
decimalToPaddedHexString(-1,27) = 0x07FFFFFF =      0b111111111111111111111111111
decimalToPaddedHexString(-1,28) = 0x0FFFFFFF =     0b1111111111111111111111111111
decimalToPaddedHexString(-1,29) = 0x1FFFFFFF =    0b11111111111111111111111111111
decimalToPaddedHexString(-1,30) = 0x3FFFFFFF =   0b111111111111111111111111111111
decimalToPaddedHexString(-1,31) = 0x7FFFFFFF =  0b1111111111111111111111111111111
decimalToPaddedHexString(-1,32) = 0xFFFFFFFF = 0b11111111111111111111111111111111
Thrown: 'number above maximum value'

नोट: यह भी निश्चित नहीं है कि यह 32 बिटसे ऊपर क्यों विफल रहता है


-3

यहाँ मेरा समाधान है:

hex = function(number) {
  return '0x' + Math.abs(number).toString(16);
}

सवाल कहता है: "जावास्क्रिप्ट में दशमलव को हेक्साडेसिमल में कैसे बदलें" । हालांकि, यह प्रश्न निर्दिष्ट नहीं करता है कि हेक्साडेसिमल स्ट्रिंग को 0x उपसर्ग के साथ शुरू होना चाहिए, जो कोई भी कोड लिखता है उसे पता होना चाहिए कि हेक्साडेसिमल कोड में हेक्साडेसिमल कोड को प्रोग्रामेटिक आइडेंटिफ़ायर और अन्य नंबरों से अलग करने के लिए जोड़ा जाता है। (1234 हो सकता है षोडश आधारी, दशमलव, या यहां तक ​​कि अष्ट)।

इसलिए, इस प्रश्न का सही उत्तर देने के लिए, स्क्रिप्ट-लेखन के उद्देश्य के लिए, आपको 0x उपसर्ग जोड़ना होगा।

Math.abs (N) फ़ंक्शन नकारात्मक को सकारात्मक में परिवर्तित करता है, और एक बोनस के रूप में, ऐसा नहीं लगता है कि किसी ने इसे लकड़ी के टुकड़े के माध्यम से चलाया।

जो उत्तर मैं चाहता था, उसमें फ़ील्ड-चौड़ाई निर्दिष्ट होती, इसलिए हम उदाहरण के लिए 8/16/32/64-बिट मानों को दिखा सकते हैं जिस तरह से आप उन्हें हेक्साडेसिमल संपादन अनुप्रयोग में सूचीबद्ध देखेंगे। यह वास्तविक, सही उत्तर है।


1
सामान्य कोडिंग प्रैक्टिस में, किसी भी अल्फा-न्यूमेरिक-सीक्वेंस की शुरुआत एक लेटर से होती है, IS NOT A NUMBER। उदाहरण के लिए: ABCDEF012345678 ग्रह पर लगभग हर कोडिंग भाषा में एक वैध पहचानकर्ता है।
हाइपरसॉफ्ट सिस्टम्स 8

1
ओह, और 0x उपसर्ग जावास्क्रिप्ट के लिए एक समस्या नहीं है: Number('0xFF') === 255;आप सभी लोगों के लिए जो रिवर्स ऑपरेशन चाहते हैं।
हाइपरसॉफ्ट सिस्टम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.