आप जावास्क्रिप्ट मानों को दशमलव मानों को जावास्क्रिप्ट में कैसे परिवर्तित करते हैं?
आप जावास्क्रिप्ट मानों को दशमलव मानों को जावास्क्रिप्ट में कैसे परिवर्तित करते हैं?
जवाबों:
संख्या को हेक्साडेसिमल स्ट्रिंग में बदलें:
hexString = yourNumber.toString(16);
और इसके साथ प्रक्रिया को उल्टा करें:
yourNumber = parseInt(hexString, 16);
yourNumber
एक चर है। यदि आप एक संख्यात्मक शाब्दिक का उपयोग करना चाहते हैं, तो आपको कुछ करना होगा (45).toString(16)
, लेकिन यदि आप एक संख्या को हार्ड-कोडिंग कर रहे हैं, तो कृपया इसे केवल हेक्स स्ट्रिंग के रूप में लिखें ... (45).toString(16)
हमेशा बराबर होगा '2d'
, इसलिए सीपीयू बर्बाद न करें यह पता लगाने के लिए चक्र।
42..toString(16)
यदि आपको बिट फ़ील्ड या 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));
number = 0x100000000 + number;
>>>
संख्या का उपयोग करने के लिए ऑपरेटर को अहस्ताक्षरित प्रतिनिधित्व जैसे ((-3253) >>> 0).toString(16)
रिटर्न में परिवर्तित कर सकते हैं "fffff34b"
।
+1
एक उपयोगी जोड़ के लिए, लेकिन यदि आप संख्याओं को एक अलग संकेतन में परिवर्तित कर रहे हैं, तो सभी संख्याएं "आमतौर पर" पहले से ही सकारात्मक हैं, अन्यथा आप नकारात्मक परिणाम चाहते हैं।
नीचे दिए गए कोड दशमलव मान को हेक्साडेसिमल में बदल देंगे। यह आपको हेक्साडेसिमल परिणाम में पैडिंग जोड़ने की भी अनुमति देता है। तो 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;
}
function toHex(d) {
return ("0"+(Number(d).toString(16))).slice(-2).toUpperCase()
}
function hexRep(number, width) { return (number+Math.pow(16, precision)).toString(16).slice(-width); }
const hex = d => Number(d).toString(16).padStart(2, '0')
😁
पूर्णता के लिए, यदि आप नकारात्मक संख्या के दो-पूरक हेक्साडेसिमल प्रतिनिधित्व चाहते हैं, तो आप शून्य-भरण-सही शिफ्ट >>>
ऑपरेटर का उपयोग कर सकते हैं । उदाहरण के लिए:
> (-1).toString(16)
"-1"
> ((-2)>>>0).toString(16)
"fffffffe"
हालांकि एक सीमा है: जावास्क्रिप्ट बिटवाइज़ ऑपरेटर अपने ऑपरेंड को 32 बिट्स के अनुक्रम के रूप में मानते हैं , अर्थात, आपको 32-बिट्स दो के पूरक मिलते हैं।
C# number to hexadecimal
विभिन्न परिणामों का उत्पादन किया गया था Javascript number to hexadecimal
। ऐसा लगता है कि जावास्क्रिप्ट में नकारात्मक संख्याओं के साथ समस्या है। यह उत्तर समस्या का समाधान प्रतीत होता है।
((-2)>>>0).toString(16).substring(2)
गद्दी के साथ:
function dec2hex(i) {
return (i+0x10000).toString(16).substr(-4).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++){}
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);
}
स्वीकृत उत्तर को ध्यान में नहीं रखा गया एकल अंक हेक्साडेसिमल कोड को लौटाता है। इसे आसानी से समायोजित किया जाता है:
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"
)। आगे जांच नहीं हुई।
substr
और toLowerCase
एक गैर-स्ट्रिंग पर ... इसलिए या तो typeof
जल्द आने की जरूरत है, या, यदि आप toHex
एक गैर-स्ट्रिंग पर फेंकने की उम्मीद करते हैं , तो आपको typeof
पूरी तरह से चेक को हटा देना चाहिए । सही बात? यही है, अगर मैं बिना एडिट के यहां कोड का उपयोग करता हूं, और कहा जाता है toHex(0x1f635)
, तो मुझे मिलेगा Uncaught TypeError: s.substr is not a function
। यदि मैं स्ट्रिंग कास्ट पहले चला जाता हूं, तो आप सही हैं, संख्या पहले दशमलव में, शायद, और चीजें बग़ल में जाती हैं। यदि s
कोई स्ट्रिंग नहीं है, तो बेशक आप कौन सा सरल कास्ट कर सकते हैं ।
var number = 3200;
var hexString = number.toString(16);
16 मूलांक है और हेक्साडेसिमल संख्या में 16 मान हैं :-)
रुचि रखने वाले किसी भी व्यक्ति के लिए, यहाँ 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-element
CSS color
संपत्ति सेट करता है rgb(64, 62, 154)
।
यहाँ 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'
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
}
color: rgb(r,g,b)
जहां rg और b दशमलव संख्या हैं।
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 }
यदि आप एक आरजीबीए रंग मान के हेक्साडेसिमल प्रतिनिधित्व के लिए एक संख्या को परिवर्तित करना चाहते हैं, तो मैंने इसे यहां से कई युक्तियों का सबसे उपयोगी संयोजन पाया है:
function toHexString(n) {
if(n < 0) {
n = 0xFFFFFFFF + n + 1;
}
return "0x" + ("00000000" + n.toString(16).toUpperCase()).substr(-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;
}
और यदि संख्या ऋणात्मक है?
यहाँ मेरा संस्करण है।
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);
}
मैं एक बहुत बड़े लूप में हेक्स स्ट्रिंग में रूपांतरण कर रहा हूं, इसलिए मैंने सबसे तेज़ खोजने के लिए कई तकनीकों की कोशिश की। मेरी आवश्यकताओं के परिणामस्वरूप एक निश्चित लंबाई वाली स्ट्रिंग थी, और नकारात्मक मानों को ठीक से एन्कोड किया (-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), लेकिन फिर भी उन तरीकों को बेहतर बनाना चाहिए जो नकारात्मक मूल्यों को ठीक से एनकोड करते हैं।
जैसा कि स्वीकृत उत्तर बताता है, दशमलव से हेक्साडेसिमल में बदलने का सबसे आसान तरीका है 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 देखें ।
जावास्क्रिप्ट में दशमलव को हेक्साडेसिमल में कैसे बदलें
मैं हेक्साडेसिमल रूपांतरण के लिए एक क्रूर रूप से साफ / सरल दशमलव को खोजने में सक्षम नहीं था, जिसमें कार्यों और सरणियों की गड़बड़ी शामिल नहीं थी ... इसलिए मुझे इसे अपने लिए बनाना पड़ा।
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
इसे पूरा करने के लिए;
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;
}
हालांकि, अगर आपको इसे अंत में एक पूर्णांक (यानी रंगों के लिए) में बदलने की आवश्यकता नहीं है, तो बस यह सुनिश्चित करना कि मान नकारात्मक नहीं हैं, पर्याप्त होना चाहिए।
मुझे कोई स्पष्ट उत्तर नहीं मिला है, बिना जांच के कि अगर यह नकारात्मक या सकारात्मक है, तो दो पूरक (नकारात्मक संख्या शामिल) का उपयोग करता है। उसके लिए, मैं एक बाइट के लिए अपना समाधान दिखाता हूं:
((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);
}
यदि आप 'पूर्ण' जावास्क्रिप्ट या सीएसएस प्रतिनिधित्व में बदलना चाहते हैं, तो आप कुछ इस तरह का उपयोग कर सकते हैं:
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
आप कुछ इस तरह से कर सकते हैं ECMAScript 6 :
const toHex = num => (num).toString(16).toUpperCase();
यदि आप बड़े पूर्णांक अर्थात संख्याओं को संख्या से अधिक खोज रहे हैं। नंबर। MAX_SAFE_INTEGER - 9007199254740991, तो आप निम्न कोड का उपयोग कर सकते हैं
const hugeNumber = "9007199254740991873839" // Make sure its in String
const hexOfHugeNumber = BigInt(hugeNumber).toString(16);
console.log(hexOfHugeNumber)
यह 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 बिटसे ऊपर क्यों विफल रहता है
यहाँ मेरा समाधान है:
hex = function(number) {
return '0x' + Math.abs(number).toString(16);
}
सवाल कहता है: "जावास्क्रिप्ट में दशमलव को हेक्साडेसिमल में कैसे बदलें" । हालांकि, यह प्रश्न निर्दिष्ट नहीं करता है कि हेक्साडेसिमल स्ट्रिंग को 0x उपसर्ग के साथ शुरू होना चाहिए, जो कोई भी कोड लिखता है उसे पता होना चाहिए कि हेक्साडेसिमल कोड में हेक्साडेसिमल कोड को प्रोग्रामेटिक आइडेंटिफ़ायर और अन्य नंबरों से अलग करने के लिए जोड़ा जाता है। (1234 हो सकता है षोडश आधारी, दशमलव, या यहां तक कि अष्ट)।
इसलिए, इस प्रश्न का सही उत्तर देने के लिए, स्क्रिप्ट-लेखन के उद्देश्य के लिए, आपको 0x उपसर्ग जोड़ना होगा।
Math.abs (N) फ़ंक्शन नकारात्मक को सकारात्मक में परिवर्तित करता है, और एक बोनस के रूप में, ऐसा नहीं लगता है कि किसी ने इसे लकड़ी के टुकड़े के माध्यम से चलाया।
जो उत्तर मैं चाहता था, उसमें फ़ील्ड-चौड़ाई निर्दिष्ट होती, इसलिए हम उदाहरण के लिए 8/16/32/64-बिट मानों को दिखा सकते हैं जिस तरह से आप उन्हें हेक्साडेसिमल संपादन अनुप्रयोग में सूचीबद्ध देखेंगे। यह वास्तविक, सही उत्तर है।
Number('0xFF') === 255;
आप सभी लोगों के लिए जो रिवर्स ऑपरेशन चाहते हैं।