javascript - atscript - जावास्क्रिप्ट इन भाषाओं से प्रेरित




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

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


AFAIK टिप्पणी 57807 गलत है और कुछ ऐसा होना चाहिए: var hex = संख्या (डी) .toString (16); var hex = parseInt के बजाय (डी, 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;
}

आप निम्न जेएसफ़िल्ड उदाहरण या स्टैक ओवरफ्लो जेएस उदाहरण कोड भी देख सकते हैं।

'use strict';

var convertBase = function () {

    function convertBase(baseFrom, baseTo) {
        return function (num) {
            return parseInt(num, baseFrom).toString(baseTo);

        };
    }

    // decimal to hexadecimal
    convertBase.dec2hex = convertBase(10, 16);
    return convertBase;
}();


alert(convertBase.dec2hex('42')); // '2a'


एक संख्या को हेक्साडेसिमल स्ट्रिंग में कनवर्ट करें:

hexString = yourNumber.toString(16);

और प्रक्रिया के साथ रिवर्स:

yourNumber = parseInt(hexString, 16);

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

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

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

नीचे दिया गया कोड दशमलव मान डी को हेक्स में परिवर्तित कर देगा। यह आपको हेक्स परिणाम में पैडिंग जोड़ने की अनुमति देता है। तो 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;
}

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

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

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

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


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

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

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

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

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

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

एक पुराने धागे प्रतिक्रियाशील के लिए खेद है।


मैं एक बहुत बड़े लूप में हेक्स स्ट्रिंग में रूपांतरण कर रहा हूं, इसलिए मैंने सबसे तेज़ खोजने के लिए कई तकनीकों की कोशिश की। मेरी आवश्यकताओं के परिणामस्वरूप एक निश्चित-लंबाई स्ट्रिंग होना था, और नकारात्मक मानों को सही ढंग से एन्कोड करना था (-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;
}

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


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

        function toHexString(n) {
            if(n < 0) {
                n = 0xFFFFFFFF + n + 1;
            }

            return "0x" + ("00000000" + n.toString(16).toUpperCase()).substr(-8);
        }

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

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

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

लूप के बिना:

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++){}

वर्णों की एक निश्चित संख्या में सीमित / पैड किया गया:

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

स्वीकृत उत्तर राज्यों के रूप में, डीसी से हेक्स में कनवर्ट करने का सबसे आसान तरीका var hex = dec.toString(16) । हालांकि, आप एक स्ट्रिंग रूपांतरण जोड़ना पसंद कर सकते हैं, क्योंकि यह सुनिश्चित करता है कि "12".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 क्रोम और फ़ायरफ़ॉक्स में धीमा है, लेकिन ओपेरा में काफी तेज है। http://jsperf.com/hex-to-dec देखें।


हेक्स फ़ंक्शन में आरजीबी के लिए इन अच्छे विचारों में से कुछ को जोड़ना (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);
}

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
}

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





number-formatting