Bagaimana Anda mengonversi nilai desimal ke ekuivalen heksadesimalnya dalam JavaScript?
Bagaimana Anda mengonversi nilai desimal ke ekuivalen heksadesimalnya dalam JavaScript?
Jawaban:
Konversi angka menjadi string heksadesimal dengan:
hexString = yourNumber.toString(16);
Dan membalikkan proses dengan:
yourNumber = parseInt(hexString, 16);
yourNumber
adalah sebuah variabel. Jika Anda ingin menggunakan numerik literal maka Anda harus melakukan sesuatu seperti (45).toString(16)
, tetapi jika Anda meng-coding angka maka silakan tulis saja sebagai string hex sendiri ... (45).toString(16)
akan selalu sama '2d'
, jadi jangan buang cpu siklus untuk mencari tahu itu.
42..toString(16)
Jika Anda perlu menangani hal-hal seperti bidang bit atau warna 32-bit, maka Anda harus berurusan dengan angka yang ditandatangani. Fungsi JavaScript toString(16)
akan mengembalikan angka heksadesimal negatif yang biasanya bukan yang Anda inginkan. Fungsi ini melakukan beberapa tambahan gila untuk membuatnya menjadi angka positif.
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;
>>>
operator untuk mengonversi angka menjadi representasi yang tidak ditandatangani, misalnya ((-3253) >>> 0).toString(16)
pengembalian "fffff34b"
.
+1
untuk tambahan yang bermanfaat, tetapi jika Anda mengonversi angka ke notasi yang berbeda, semua angka itu "biasanya" sudah positif, atau Anda ingin hasil negatif.
Kode di bawah ini akan mengonversi nilai desimal d menjadi heksadesimal. Ini juga memungkinkan Anda untuk menambahkan bantalan ke hasil heksadesimal. Jadi 0 akan menjadi 00 secara default.
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')
😁
Untuk kelengkapan, jika Anda menginginkan representasi hexadecimal dua-pelengkap dari angka negatif, Anda dapat menggunakan operator shift nol-isi-kanan>>>
. Contohnya:
> (-1).toString(16)
"-1"
> ((-2)>>>0).toString(16)
"fffffffe"
Namun ada satu batasan: operator bitwise JavaScript memperlakukan operan mereka sebagai urutan 32 bit , yaitu, Anda mendapatkan komplemen 32-bit two's.
C# number to hexadecimal
menghasilkan hasil yang berbeda Javascript number to hexadecimal
. Sepertinya Javascript memiliki masalah dengan angka negatif. Jawaban ini tampaknya menjadi solusi untuk masalah tersebut.
((-2)>>>0).toString(16).substring(2)
Dengan bantalan:
function dec2hex(i) {
return (i+0x10000).toString(16).substr(-4).toUpperCase();
}
Tanpa loop:
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
Juga bukankah lebih baik tidak menggunakan tes putaran yang harus dievaluasi?
Misalnya, alih-alih:
for (var i = 0; i < hex.length; i++){}
memiliki
for (var i = 0, var j = hex.length; i < j; i++){}
Menggabungkan beberapa ide bagus ini untuk fungsi RGB-value-to-hexadecimal (tambahkan tempat #
lain untuk 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);
}
Jawaban yang diterima tidak memperhitungkan satu digit kode heksadesimal yang dikembalikan. Ini mudah disesuaikan dengan:
function numHex(s)
{
var a = s.toString(16);
if ((a.length % 2) > 0) {
a = "0" + a;
}
return a;
}
dan
function strHex(s)
{
var a = "";
for (var i=0; i<s.length; i++) {
a = a + numHex(s.charCodeAt(i));
}
return a;
}
Saya percaya jawaban di atas telah diposting berkali-kali oleh orang lain dalam satu atau lain bentuk. Saya membungkus ini dalam fungsi toHex () seperti:
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);
}
}
Perhatikan bahwa ekspresi reguler numerik berasal dari 10+ Fungsi Ekspresi Reguler JavaScript yang Berguna untuk meningkatkan efisiensi aplikasi web Anda .
Pembaruan: Setelah menguji hal ini beberapa kali saya menemukan kesalahan (tanda kutip ganda di RegExp), jadi saya memperbaikinya. NAMUN! Setelah sedikit pengujian dan setelah membaca posting oleh almaz - saya sadar saya tidak bisa mendapatkan angka negatif untuk bekerja.
Lebih lanjut - saya membaca beberapa tentang ini dan karena semua nomor JavaScript disimpan sebagai kata 64 bit tidak peduli apa - saya mencoba memodifikasi kode numHex untuk mendapatkan kata 64 bit. Tetapi ternyata Anda tidak bisa melakukan itu. Jika Anda memasukkan "3.14159265" AS A NUMBER ke dalam variabel - yang dapat Anda dapatkan adalah "3", karena bagian fraksional hanya dapat diakses dengan mengalikan angka dengan sepuluh (IE: 10.0) berulang kali. Atau dengan kata lain - nilai heksadesimal 0xF menyebabkan nilai floating point diterjemahkan ke dalam bilangan bulat sebelum ANDed yang menghapus semuanya di belakang periode. Daripada mengambil nilai secara keseluruhan (yaitu: 3.14159265) dan ANDing nilai floating point terhadap nilai 0xF.
Jadi hal terbaik yang harus dilakukan, dalam hal ini, adalah mengubah 3.14159265 menjadi sebuah string dan kemudian hanya mengonversi string tersebut. Karena hal di atas, itu juga memudahkan untuk mengkonversi angka negatif karena tanda minus hanya menjadi 0x26 di bagian depan nilai.
Jadi yang saya lakukan adalah menentukan bahwa variabel tersebut berisi angka - cukup konversikan ke string dan konversikan string. Ini berarti bagi semua orang bahwa di sisi server Anda harus mencopot pemasangan string yang masuk dan kemudian untuk menentukan informasi yang masuk adalah numerik. Anda dapat melakukannya dengan mudah dengan hanya menambahkan "#" ke depan angka dan "A" ke depan string karakter yang kembali. Lihat fungsi toHex ().
Selamat bersenang-senang!
Setelah satu tahun lagi dan banyak pemikiran, saya memutuskan bahwa fungsi "toHex" (dan saya juga memiliki fungsi "fromHex") benar-benar perlu dirubah. Seluruh pertanyaannya adalah "Bagaimana saya bisa melakukan ini dengan lebih efisien?" Saya memutuskan bahwa fungsi to / from hexadecimal seharusnya tidak peduli jika sesuatu merupakan bagian fraksional tetapi pada saat yang sama harus memastikan bahwa bagian fraksional termasuk dalam string.
Jadi kemudian pertanyaannya menjadi, "Bagaimana Anda tahu Anda bekerja dengan string heksadesimal?". Jawabannya sederhana. Gunakan informasi pra-string standar yang sudah dikenal di seluruh dunia.
Dengan kata lain - gunakan "0x". Jadi sekarang fungsi toHex saya terlihat untuk melihat apakah itu sudah ada dan apakah itu - hanya mengembalikan string yang dikirim ke sana. Kalau tidak, itu mengubah string, angka, apa pun. Berikut adalah fungsi toHex yang direvisi:
/////////////////////////////////////////////////////////////////////////////
// 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;
}
Ini adalah fungsi yang sangat cepat yang memperhitungkan satu digit akun, angka floating point, dan bahkan memeriksa untuk melihat apakah orang tersebut mengirim nilai hex over untuk di-hexed lagi. Ini hanya menggunakan empat panggilan fungsi dan hanya dua dari mereka yang ada di loop. Untuk melepas hex nilai yang Anda gunakan:
/////////////////////////////////////////////////////////////////////////////
// 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;
}
Seperti fungsi toHex (), fungsi fromHex () pertama-tama mencari "0x" dan kemudian menerjemahkan informasi yang masuk menjadi string jika belum menjadi string. Saya tidak tahu bagaimana ini bukan string - tetapi untuk berjaga-jaga - saya periksa. Fungsi kemudian berjalan, mengambil dua karakter dan menerjemahkannya ke karakter ASCII. Jika Anda ingin menerjemahkan Unicode, Anda harus mengubah perulangan menjadi empat (4) karakter sekaligus. Tapi kemudian Anda juga perlu memastikan bahwa string TIDAK dibagi oleh empat. Jika - maka itu adalah string heksadesimal standar. (Ingat string memiliki "0x" di depannya.)
Skrip pengujian sederhana untuk menunjukkan bahwa -3.14159265, ketika dikonversi ke string, masih -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;
?>
Karena cara kerja JavaScript sehubungan dengan fungsi toString (), semua masalah tersebut dapat dihilangkan yang sebelumnya menyebabkan masalah. Sekarang semua string dan angka dapat dikonversi dengan mudah. Selanjutnya, hal-hal seperti objek akan menyebabkan kesalahan yang dihasilkan oleh JavaScript itu sendiri. Saya percaya ini tentang sebaik yang didapatnya. Satu-satunya peningkatan yang tersisa adalah untuk W3C untuk hanya menyertakan fungsi toHex () dan fromHex () dalam JavaScript.
if( s.substr(0,2)
sebelum if (typeof s != "string")
mungkin bukan yang Anda inginkan, misalnya. Apa yang telah saya kembalikan juga bukan yang saya harapkan ( toHex(0x1f635)
memberi "0x313238353635"
). Belum diselidiki lebih lanjut.
substr
& toLowerCase
pada non-string ... sehingga typeof
kebutuhan untuk datang lebih cepat, atau, jika Anda berharap toHex
untuk melemparkan non-string di sana, Anda harus menghapus typeof
cek sepenuhnya. Masuk akal? Yaitu, jika saya menggunakan kode di sini tanpa suntingan, dan menelepon toHex(0x1f635)
, saya akan mendapatkannya Uncaught TypeError: s.substr is not a function
. Jika saya memindahkan string yang dilemparkan sebelumnya, Anda benar, angka yang dilemparkan ke desimal pertama, mungkin, dan semuanya berjalan menyamping. Yang tentu saja berarti Anda tidak dapat melakukan pemeran sederhana di sini jika s
bukan string.
var number = 3200;
var hexString = number.toString(16);
16 adalah radix dan ada 16 nilai dalam angka heksadesimal :-)
Bagi siapa pun yang tertarik, inilah JSFiddle membandingkan sebagian besar jawaban yang diberikan untuk pertanyaan ini .
Dan inilah metode yang akhirnya saya gunakan:
function decToHex(dec) {
return (dec + Math.pow(16, 6)).toString(16).substr(-6)
}
Juga, ingatlah bahwa jika Anda ingin mengonversi dari desimal ke heks untuk digunakan dalam CSS sebagai tipe data warna , Anda mungkin lebih suka mengekstraksi nilai RGB dari desimal dan menggunakan rgb () .
Misalnya ( 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 + ')')
Ini menetapkan properti #some-element
CSS color
menjadi rgb(64, 62, 154)
.
Berikut ini adalah versi ECMAScript 6 yang dipangkas:
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)
mana rg dan b adalah angka desimal.
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 }
Jika Anda ingin mengonversi angka menjadi representasi heksadesimal dari nilai warna RGBA, saya telah menemukan ini sebagai kombinasi paling berguna dari beberapa tips dari sini:
function toHexString(n) {
if(n < 0) {
n = 0xFFFFFFFF + n + 1;
}
return "0x" + ("00000000" + n.toString(16).toUpperCase()).substr(-8);
}
Komentar AFAIK 57807 salah dan harus seperti: var hex = Number (d) .toString (16); bukannya 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;
}
Dan apakah angkanya negatif?
Ini versi saya.
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);
}
Saya melakukan konversi ke string hex dalam loop yang cukup besar, jadi saya mencoba beberapa teknik untuk menemukan yang tercepat. Persyaratan saya adalah untuk memiliki string tetap-panjang sebagai hasilnya, dan menyandikan nilai negatif dengan benar (-1 => ff..f).
Sederhana .toString(16)
tidak bekerja untuk saya karena saya membutuhkan nilai negatif untuk dikodekan dengan benar. Kode berikut adalah yang tercepat yang telah saya uji sejauh ini pada nilai 1-2 byte (perhatikan bahwa symbols
mendefinisikan jumlah simbol output yang ingin Anda dapatkan, yaitu untuk integer 4-byte harus sama dengan 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;
}
Ia melakukan lebih cepat daripada .toString(16)
pada angka 1-2 byte dan lebih lambat pada angka yang lebih besar (ketika symbols
> = 6), tetapi masih harus mengungguli metode yang menyandikan nilai negatif dengan benar.
Seperti yang dinyatakan dalam jawaban yang diterima, cara termudah untuk mengkonversi dari desimal ke heksadesimal adalah var hex = dec.toString(16)
. Namun, Anda mungkin lebih suka menambahkan konversi string, karena memastikan bahwa representasi string suka "12".toString(16)
bekerja dengan benar.
// Avoids a hard-to-track-down bug by returning `c` instead of `12`
(+"12").toString(16);
Untuk membalikkan proses Anda juga dapat menggunakan solusi di bawah ini, karena lebih pendek.
var dec = +("0x" + hex);
Tampaknya lebih lambat di Google Chrome dan Firefox, tetapi secara signifikan lebih cepat di Opera. Lihat http://jsperf.com/hex-to-dec .
Bagaimana mengkonversi desimal ke heksadesimal dalam JavaScript
Saya tidak dapat menemukan konversi desimal ke heksadesimal brutal yang bersih / sederhana yang tidak melibatkan kekacauan fungsi dan array ... jadi saya harus membuat ini untuk diri saya sendiri.
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
Singkatnya semuanya;
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;
}
Namun, jika Anda tidak perlu mengubahnya kembali ke integer di akhir (yaitu untuk warna), maka pastikan nilainya tidak negatif sudah cukup.
Saya belum menemukan jawaban yang jelas, tanpa cek apakah itu negatif atau positif, yang menggunakan komplemen dua (termasuk angka negatif). Untuk itu, saya menunjukkan solusi saya ke satu byte:
((0xFF + number +1) & 0x0FF).toString(16);
Anda dapat menggunakan instruksi ini untuk sejumlah byte, hanya Anda tambahkan FF
di tempat masing-masing. Misalnya, menjadi dua byte:
((0xFFFF + number +1) & 0x0FFFF).toString(16);
Jika Anda ingin melemparkan integer array ke string heksadesimal:
s = "";
for(var i = 0; i < arrayNumber.length; ++i) {
s += ((0xFF + arrayNumber[i] +1) & 0x0FF).toString(16);
}
Jika Anda ingin mengonversi ke representasi JavaScript atau CSS 'lengkap', Anda dapat menggunakan sesuatu seperti:
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
Anda dapat melakukan sesuatu seperti ini di ECMAScript 6 :
const toHex = num => (num).toString(16).toUpperCase();
Jika Anda mencari untuk mengonversi bilangan bulat Besar mis. Angka lebih besar dari Number.MAX_SAFE_INTEGER - 9007199254740991, maka Anda dapat menggunakan kode berikut
const hugeNumber = "9007199254740991873839" // Make sure its in String
const hexOfHugeNumber = BigInt(hugeNumber).toString(16);
console.log(hexOfHugeNumber)
Ini didasarkan pada solusi Prestaul dan Tod. Namun, ini adalah generalisasi yang memperhitungkan ukuran variabel yang bervariasi (mis. Parsing nilai yang ditandatangani dari log serial mikrokontroler).
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');
}
Skrip uji:
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)}`);
}
Hasil tes:
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'
Catatan: Tidak terlalu yakin mengapa gagal di atas 32 bitsize
Inilah solusi saya:
hex = function(number) {
return '0x' + Math.abs(number).toString(16);
}
Pertanyaannya mengatakan: "Bagaimana mengkonversi desimal ke heksadesimal dalam JavaScript" . Sementara, pertanyaan tidak menentukan bahwa string heksadesimal harus dimulai dengan awalan 0x, siapa pun yang menulis kode harus tahu bahwa 0x ditambahkan ke kode heksadesimal untuk membedakan kode heksadesimal dari pengidentifikasi programatik dan angka lainnya (1234 dapat berupa heksadesimal, desimal, atau bahkan oktal).
Oleh karena itu, untuk menjawab pertanyaan ini dengan benar, untuk tujuan penulisan skrip, Anda harus menambahkan awalan 0x.
Fungsi Math.abs (N) mengubah negatif menjadi positif, dan sebagai bonus, itu tidak terlihat seperti seseorang menjalankannya melalui chipper kayu.
Jawaban yang saya inginkan, akan memiliki specifier lebar bidang, jadi kita bisa misalnya menunjukkan nilai 8/16/32/64-bit seperti yang Anda lihat dalam daftar aplikasi pengeditan heksadesimal. Itu, adalah jawaban yang sebenarnya dan benar.
Number('0xFF') === 255;
untuk semua orang di luar sana yang menginginkan operasi terbalik.