ජාවාස්ක්රිප්ට් හි දශම අගයන් ඒවායේ ෂඩාස්රාකාර අගයට පරිවර්තනය කරන්නේ කෙසේද?
ජාවාස්ක්රිප්ට් හි දශම අගයන් ඒවායේ ෂඩාස්රාකාර අගයට පරිවර්තනය කරන්නේ කෙසේද?
Answers:
අංකයක් ෂඩාස්රාකාර නූලකට පරිවර්තනය කරන්න:
hexString = yourNumber.toString(16);
සහ ක්රියාවලිය ආපසු හරවන්න:
yourNumber = parseInt(hexString, 16);
yourNumber
විචල්යයකි. ඔබට සංඛ්යාත්මක වචනාර්ථයක් භාවිතා කිරීමට අවශ්ය නම් ඔබට එවැනි දෙයක් කිරීමට සිදුවේ (45).toString(16)
, නමුත් ඔබ අංකයක් තදින් කේත කරන්නේ නම් කරුණාකර එය හෙක්ස් නූලක් ලෙස ලියන්න ... (45).toString(16)
සෑම විටම සමාන වනු ඇත '2d'
, එබැවින් cpu නාස්ති නොකරන්න එය වටහා ගැනීමට චක්ර.
42..toString(16)
ඔබට බිට් ක්ෂේත්ර හෝ බිට් 32 වර්ණ වැනි දෑ හැසිරවීමට අවශ්ය නම්, ඔබ අත්සන් කළ අංක සමඟ කටයුතු කළ යුතුය. ජාවාස්ක්රිප්ට් ශ්රිතය toString(16)
සාමාන්යයෙන් ඔබට අවශ්ය නොවන negative ණ ෂඩාස්රාකාර සංඛ්යාවක් ලබා දෙනු ඇත. මෙම ශ්රිතය ධනාත්මක සංඛ්යාවක් බවට පත් කිරීම සඳහා පිස්සු එකතු කිරීමක් කරයි.
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
ප්රයෝජනවත් එකතු කිරීමක් සඳහා, නමුත් ඔබ සංඛ්යා වෙනත් අංකනයකට පරිවර්තනය කරන්නේ නම්, සියලු සංඛ්යා දැනටමත් "සාමාන්යයෙන්" ධනාත්මක වේ, නැතිනම් ඔබට negative ණාත්මක ප්රති .ල අවශ්ය වේ.
පහත කේතය දශම අගය d ෂඩාස්රාකාර බවට පරිවර්තනය කරයි. ෂඩාස්රාකාර ප්රති .ලයට පෑඩින් එකතු කිරීමට ද එය ඔබට ඉඩ සලසයි. එබැවින් 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')
😁
සම්පූර්ණත්වය සඳහා, negative ණ සංඛ්යාවක දෙකේ අනුපූරක ෂඩාස්රාකාර නිරූපණය ඔබට අවශ්ය නම් , ඔබට එය භාවිතා කළ හැකිය ශුන්ය පිරවුම්-දකුණ මාරුව >>>
ක්රියාකරු . උදාහරණයක් වශයෙන්:
> (-1).toString(16)
"-1"
> ((-2)>>>0).toString(16)
"fffffffe"
කෙසේ වෙතත් එක් සීමාවක් තිබේ: ජාවාස්ක්රිප්ට් බිට්වේස් ක්රියාකරුවන් ඔවුන්ගේ ක්රියාකාරිත්වය බිටු 32 ක අනුක්රමයක් ලෙස සලකයි , එනම් ඔබට බිටු 32 ක අනුපූරකය ලැබේ.
C# number to hexadecimal
results ල ලබා දෙන නිසා සියලු ප්රශ්න හාරමින් Javascript number to hexadecimal
. ජාවාස්ක්රිප්ට් හි negative ණ සංඛ්යා සමඟ ගැටළුවක් ඇති බව පෙනේ. මෙම පිළිතුර ගැටලුවට විසඳුම බව පෙනේ.
((-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- අගය-සිට-ෂඩාස්රාකාර ශ්රිතයක් සඳහා මෙම හොඳ අදහස් කිහිපයක් ඒකාබද්ධ කිරීම ( #
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 හි ද්විත්ව උපුටා දැක්වීම්), එබැවින් මම එය නිවැරදි කළෙමි. කෙසේවෙතත්! තරමක් පරික්ෂා කිරීමෙන් පසුව සහ අල්මාස් විසින් ලිපිය කියවීමෙන් පසුව - මට වැඩ කිරීමට negative ණ සංඛ්යා ලබා ගත නොහැකි බව මට වැටහුණි.
තව දුරටත් - මම මේ පිළිබඳව යම් කියවීමක් කළ අතර සියලු ජාවාස්ක්රිප්ට් අංක 64 බිට් වචන 64 ක් ලෙස ගබඩා කර ඇති හෙයින් කුමක් වුවත් - බිට් 64 වචනය ලබා ගැනීම සඳහා මම අංකහෙක්ස් කේතය වෙනස් කිරීමට උත්සාහ කළෙමි. නමුත් ඔබට එය කළ නොහැකි බව පෙනේ. ඔබ "3.14159265" අංකයක් ලෙස විචල්යයකට දැමුවහොත් - ඔබට ලබා ගත හැක්කේ "3" පමණි, මන්දයත් භාගික කොටස ප්රවේශ විය හැක්කේ සංඛ්යා දහයෙන් ගුණ කිරීමෙන් පමණි (IE: 10.0) නැවත නැවත. හෝ වෙනත් අයුරකින් කිරීමට - ෂඩ් දශම 0xF වටිනාකම ද හේතු ඉපිලුම් ලක්ෂ්ය අගය යනු පරිවර්තනය කිරීම පූර්ණ සංඛ්යාමය එය කාලය පිටුපස සියල්ල ඉවත් කරන ANDed පෙර. සමස්තයක් ලෙස අගය ගැනීම වෙනුවට (එනම්: 3.14159265) සහ 0xF අගයට සාපේක්ෂව පාවෙන ලක්ෂ්ය අගය ANDing කිරීම.
එබැවින් කළ හැකි හොඳම දෙය නම්, මේ අවස්ථාවේ දී, 3.14159265 නූලක් බවට පරිවර්තනය කර නූල් පරිවර්තනය කිරීමයි. ඉහත නිසා, negative ණ සංඛ්යා පරිවර්තනය කිරීමද පහසු කරයි, මන්ද the ණ ලකුණ අගයේ ඉදිරිපස 0x26 බවට පත්වේ.
ඉතින් මම කළේ විචල්යයේ අංකයක් ඇති බව තීරණය කිරීමයි - එය නූලකට පරිවර්තනය කර නූල පරිවර්තනය කරන්න. මෙයින් අදහස් කරන්නේ සේවාදායකයාගේ පැත්තේ ඔබට එන නූල ඉවත් කිරීමට අවශ්ය වන අතර ඉන් පසුව ලැබෙන තොරතුරු සංඛ්යාත්මක බව තීරණය කිරීමයි. අංකවල ඉදිරිපසට "#" සහ නැවත එන අක්ෂර මාලාවක ඉදිරිපස "A" එකතු කිරීමෙන් ඔබට එය පහසුවෙන් කළ හැකිය. ToHex () ශ්රිතය බලන්න.
විනෝද වන්න!
තවත් වසරක් සහ බොහෝ සිතුවිලි වලින් පසුව, "toHex" ශ්රිතය (සහ මට "fromHex" ශ්රිතයක්ද ඇත) සැබවින්ම නවීකරණය කිරීමට අවශ්ය බව මම තීරණය කළෙමි. සමස්ත ප්රශ්නය වූයේ "මෙය වඩාත් කාර්යක්ෂමව කරන්නේ කෙසේද?" ෂඩාස්රාකාර ශ්රිතයක් සිට / දක්වා යම් දෙයක් භාගික කොටසක් දැයි සැලකිලිමත් නොවිය යුතු බව මම තීරණය කළෙමි.
ඉතින් ප්රශ්නය වූයේ, "ඔබ ෂඩාස්රාකාර නූලක් සමඟ වැඩ කරන බව ඔබ දන්නේ කෙසේද?". පිළිතුර සරල ය. ලොව පුරා දැනටමත් හඳුනාගෙන ඇති සම්මත පෙර-තොරතුරු භාවිතා කරන්න.
වෙනත් වචන වලින් කිවහොත් - "0x" භාවිතා කරන්න. ඉතින් දැන් මගේ toHex ශ්රිතය පෙනෙන්නේ එය දැනටමත් තිබේද යන්න සහ එය තිබේ නම් - එය එයට යවන ලද නූල යවයි. එසේ නොමැති නම්, එය නූල්, අංකය, ඕනෑම දෙයක් පරිවර්තනය කරයි. සංශෝධිත 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;
?>
ToString () ශ්රිතයට අදාළව ජාවාස්ක්රිප්ට් ක්රියා කරන ආකාරය නිසා, මීට පෙර ගැටළු ඇති කළ එම සියලු ගැටලු ඉවත් කළ හැකිය. දැන් සියලු නූල් සහ අංක පහසුවෙන් පරිවර්තනය කළ හැකිය. තවද, වස්තූන් වැනි දෑ ජාවාස්ක්රිප්ට් විසින්ම දෝෂයක් ජනනය කිරීමට හේතු වේ. මම විශ්වාස කරනවා මේක ලැබෙන තරමට හොඳයි කියලා. ජාවාස්ක්රිප්ට් හි toHex () සහ fromHex () ශ්රිතයක් ඇතුළත් කිරීම W3C සඳහා ඉතිරිව ඇති එකම දියුණුවයි.
if( s.substr(0,2)
මීට පෙර if (typeof s != "string")
ඔබට අවශ්ය දේ නොවේ. මා ආපසු පැමිණියේ මා බලාපොරොත්තු වූ දෙය නොවේ ( toHex(0x1f635)
ලබා දෙයි "0x313238353635"
). වැඩිදුර විමර්ශනය කර නැත.
substr
සහ toLowerCase
එම නිසා එක්කෝ-string නොවන මත ... typeof
අවශ්යතා ඉක්මනින් එන්න, හෝ, ඔබ අපේක්ෂා නම් toHex
එතනම-string නොවන මත විසි කිරීමට, ඔබ ඉවත් කළ යුතුය typeof
සම්පූර්ණයෙන්ම පරීක්ෂා කරන්න. තේරුමක් තිබේද? එනම්, මම මෙහි සංස්කරණයකින් තොරව කේතය භාවිතා කර ඇමතුමක් ගත්තොත් toHex(0x1f635)
, මට ලැබෙනු Uncaught TypeError: s.substr is not a function
ඇත. මම කලින් වාත්තු වාත්තු කළහොත්, ඔබ හරි, සංඛ්යාව පළමුව දශමයට යයි, සමහර විට, දේවල් පැත්තකට යයි. ඇත්ත වශයෙන්ම එයින් අදහස් කරන්නේ s
නූලක් නොවේ නම් ඔබට මෙහි සරල වාත්තු කිරීමක් කළ නොහැකි බවයි.
උනන්දුවක් දක්වන ඕනෑම කෙනෙකුට, මෙම ප්රශ්නයට ලබා දී ඇති පිළිතුරු බොහොමයක් සංසන්දනය කරන JSFiddle මෙන්න .
මෙන්න මම අවසන් කළ ක්රමය මෙන්න:
function decToHex(dec) {
return (dec + Math.pow(16, 6)).toString(16).substr(-6)
}
වර්ණ දත්ත වර්ගයක් ලෙස CSS භාවිතා කිරීම සඳහා ඔබ දශමයේ සිට හෙක්ස් බවට පරිවර්තනය කිරීමට බලාපොරොත්තු වන්නේ නම් , ඒ වෙනුවට ඔබ 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)
.
var number = 3200;
var hexString = number.toString(16);
16 යනු රේඩික්ස් වන අතර ෂඩාස්රාකාර අංකයක අගයන් 16 ක් ඇත :-)
මෙන්න කැපූ 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 }
ඔබට RGBA වර්ණ අගයක ෂඩාස්රාකාර නිරූපණයක් බවට අංකයක් පරිවර්තනය කිරීමට අවශ්ය නම්, මෙය මෙතැන් සිට ඉඟි කිහිපයක වඩාත්ම ප්රයෝජනවත් සංයෝජනය බව මට පෙනී ගියේය:
function toHexString(n) {
if(n < 0) {
n = 0xFFFFFFFF + n + 1;
}
return "0x" + ("00000000" + n.toString(16).toUpperCase()).substr(-8);
}
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;
}
අංකය negative ණ නම්?
මෙන්න මගේ අනුවාදය.
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);
}
මම සෑහෙන විශාල ලූපයකින් හෙක්ස් නූල් බවට පරිවර්තනය කරමි, එබැවින් වේගවත්ම එක සොයා ගැනීම සඳහා මම ක්රම කිහිපයක් උත්සාහ කළෙමි. මගේ අවශ්යතාවයන් වූයේ ස්ථාවර දිග නූලක් තිබීම සහ negative ණ අගයන් නිසි ලෙස කේතනය කිරීමයි (-1 => ff..f).
.toString(16)
නිසියාකාරව කේතනය කිරීමට මට negative ණාත්මක අගයන් අවශ්ය බැවින් සරල මට වැඩ කළේ නැත. පහත කේතය මම බයිට් 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), නමුත් තවමත් negative ණ අගයන් නිසි ලෙස සංකේතවත් කරන ක්රම ඉක්මවා යා යුතුය.
පිළිගත් පිළිතුරෙහි දැක්වෙන පරිදි, දශමයේ සිට ෂඩාස්රාකාර බවට පරිවර්තනය වීමට ඇති පහසුම ක්රමය වේ 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);
ගූගල් ක්රෝම් සහ ෆයර්ෆොක්ස් වල එය මන්දගාමී බව පෙනේ, නමුත් ඔපෙරා හි එය සැලකිය යුතු වේගයකින් යුක්ත වේ. 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;
}
කෙසේ වෙතත්, ඔබට එය අවසානයේ දී පූර්ණ සංඛ්යාවක් බවට පරිවර්තනය කිරීමට අවශ්ය නොවන්නේ නම් (එනම් වර්ණ සඳහා), එවිට අගයන් negative ණ නොවන බවට වග බලා ගැනීම පමණක් ප්රමාණවත් වේ.
දෙදෙනෙකුගේ අනුපූරකය භාවිතා කරන (negative ණ සංඛ්යා ඇතුළත්) negative ණාත්මක හෝ ධනාත්මක දැයි පරීක්ෂා කිරීමකින් තොරව මට පැහැදිලි පිළිතුරක් හමු නොවීය. ඒ සඳහා, මම එක් විසඳුමකට මගේ විසඳුම පෙන්වමි:
((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);
}
ඔබ 'පූර්ණ' ජාවාස්ක්රිප්ට් හෝ CSS නිරූපණයකට පරිවර්තනය කිරීමට බලාපොරොත්තු වන්නේ නම්, ඔබට මෙවැනි දෙයක් භාවිතා කළ හැකිය:
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)
මෙය ප්රෙස්ටෝල් සහ ටොඩ්ගේ විසඳුම් මත පදනම් වේ. කෙසේ වෙතත්, මෙය විචල්යයක ප්රමාණයට වෙනස් වන සාමාන්යකරණයකි (උදා: මයික්රොකොන්ට්රෝලර් අනුක්රමික ලොගයකින් අත්සන් කළ අගය විග්රහ කිරීම).
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)}`);
}
පරීක්ෂණ ප්රති results ල:
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);
}
ප්රශ්නය මෙසේ කියයි: "ජාවාස්ක්රිප්ට් හි දශම හෙක්සැඩිසිමල් බවට පරිවර්තනය කරන්නේ කෙසේද" . මෙම ප්රශ්නය ද මේ ෂඩ් දශම String එකක් 0x prefix භාවිතා කල හැක ආරම්භ කළ යුතු බව සඳහන් නොකරන අතර, කේතය මෙසේ ලියයි කෙනෙකුට හඳුනාගැනීමට 0x ෂඩ් දශම කේත එකතු වන බව දැන ගත යුතු ෂඩ් දශම කේත සිට කි්රයාමාර්ගික හඳුනා හා අනෙකුත් සංඛ්යා (1234 ෂඩාස්රාකාර, දශම හෝ විය හැක) පවා අෂ්ටක).
එබැවින්, මෙම ප්රශ්නයට නිවැරදිව පිළිතුරු සැපයීම සඳහා, ස්ක්රිප්ට් ලිවීමේ අරමුණ සඳහා, ඔබ 0x උපසර්ගය එක් කළ යුතුය.
Math.abs (N) ශ්රිතය සෘණ ධනාත්මක බවට පරිවර්තනය කරයි, ප්රසාද දීමනාවක් ලෙස, යමෙකු එය ලී-චිපර් හරහා ධාවනය කළ බවක් නොපෙනේ.
මට අවශ්ය පිළිතුරට ක්ෂේත්ර පළල පිරිවිතරයක් තිබෙන්නට ඇත, එබැවින් අපට ෂඩාස්රාකාර සංස්කරණ යෙදුමක ලැයිස්තුගත කර ඇති ආකාරය ඔබ දකින ආකාරයට 8/16/32 / 64-bit අගයන් පෙන්විය හැකිය. එය සත්ය, නිවැරදි පිළිතුරයි.
Number('0xFF') === 255;
ප්රතිලෝම මෙහෙයුම අවශ්ය ඔබ එහි සිටින සියලු දෙනාටම.