দশমিক মানগুলিকে আপনি জাভাস্ক্রিপ্টে হেক্সাডেসিমাল সমতলে কীভাবে রূপান্তর করবেন?
দশমিক মানগুলিকে আপনি জাভাস্ক্রিপ্টে হেক্সাডেসিমাল সমতলে কীভাবে রূপান্তর করবেন?
উত্তর:
এর সাথে একটি নম্বরকে হেক্সাডেসিমাল স্ট্রিংয়ে রূপান্তর করুন:
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
দরকারী সংযোজনের জন্য, তবে আপনি যদি নম্বরগুলিকে অন্য স্বরলিপিতে রূপান্তর করেন তবে সমস্ত সংখ্যা ইতিমধ্যে ইতিমধ্যে "ইতিবাচক" ইতিবাচক, অন্যথায় আপনি নেতিবাচক ফলাফল চান।
নীচের কোডটি দশমিক মান 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')
😁
সম্পূর্ণতার জন্য, আপনি যদি দুজনের পরিপূরক হেক্সাডেসিমেলকে নেতিবাচক সংখ্যার উপস্থাপন করতে চান তবে আপনি শূন্য-পূরণ-ডান শিফট >>>
অপারেটরটি ব্যবহার করতে পারেন । এই ক্ষেত্রে:
> (-1).toString(16)
"-1"
> ((-2)>>>0).toString(16)
"fffffffe"
তবে একটি সীমাবদ্ধতা রয়েছে: জাভাস্ক্রিপ্ট বিটওয়াইস অপারেটরগুলি তাদের অপারেশনগুলিকে 32 বিটের ক্রম হিসাবে বিবেচনা করে , অর্থাৎ আপনি 32-বিট দুইয়ের পরিপূরক পাবেন।
C# number to hexadecimal
বিভিন্ন ফলাফল তৈরি হয়েছিল 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++){}
আরজিবি-মান-হেক্সাডেসিমাল ফাংশন ( #
এইচটিএমএল / সিএসএসের জন্য অন্য কোথাও যুক্ত করুন ) এর জন্য এই কয়েকটি ভাল ধারণার সংমিশ্রণ :
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;
}
আমি বিশ্বাস করি উপরোক্ত উত্তরগুলি অন্য কোনও ফর্ম বা অন্য কোনও দ্বারা বহুবার পোস্ট করা হয়েছে। আমি এগুলিকে একটি টুএক্স () ফাংশনটিতে গুটিয়ে রাখি:
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 বিট শব্দ হিসাবে সংরক্ষণ করা হয় তা যাই হোক না কেন - আমি 64H বিট শব্দটি পেতে নামহেক্স কোডটি সংশোধন করার চেষ্টা করেছি। তবে দেখা যাচ্ছে যে আপনি এটি করতে পারবেন না। যদি আপনি "3.14159265" কে একটি সংখ্যা হিসাবে চলক হিসাবে স্থাপন করেন - আপনি যে পরিমাণটি পেতে সক্ষম হবেন তা হ'ল "3", কারণ ভগ্নাংশটি কেবলমাত্র দশটি (IE: 10.0) দ্বারা বারে বার করে সংখ্যাটি অ্যাক্সেসযোগ্য। বা অন্যভাবে বলতে গেলে - 0x এফের হেক্সাডেসিমাল মান অ্যান্ডেড হওয়ার আগে ভাসমান পয়েন্টের মানটি পূর্ণসংখ্যায় অনুবাদ করে দেয় যা পিরিয়ডের পিছনে সমস্ত কিছু সরিয়ে দেয়। মানটিকে সামগ্রিকভাবে গ্রহণের পরিবর্তে (যেমন: 3.14159265) এবং 0xF মানের বিপরীতে ভাসমান বিন্দু মানটি বজায় রাখা।
সুতরাং সবচেয়ে ভাল জিনিস, এই ক্ষেত্রে, 3.14159265 কে একটি স্ট্রিংয়ে রূপান্তর করা এবং তারপরে কেবল স্ট্রিংটি রূপান্তর করা। উপরের কারণে এটি নেতিবাচক সংখ্যাগুলিকে রূপান্তর করাও সহজ করে তোলে কারণ বিয়োগ চিহ্নটি মূল্যের সামনের দিকে 0x26 হয়ে যায়।
সুতরাং আমি যা করেছি তা স্থির করেছিলাম যে চলকটিতে একটি সংখ্যা রয়েছে - কেবল এটি একটি স্ট্রিংতে রূপান্তর করুন এবং স্ট্রিংকে রূপান্তর করুন। সবার কাছে এটির অর্থ হ'ল সার্ভারের দিকে আপনাকে আগত স্ট্রিংটি আনহেক্স করতে হবে এবং তারপরে আগত তথ্যগুলি সংখ্যাসূচক হবে তা নির্ধারণ করতে হবে। আপনি কেবল সংখ্যার সামনের দিকে "#" এবং একটি অক্ষরের স্ট্রিংয়ের সামনে "A" যুক্ত করে সহজেই তা করতে পারেন। টুহেক্স () ফাংশনটি দেখুন।
আনন্দ কর!
আরও এক বছর এবং অনেক চিন্তাভাবনার পরে, আমি স্থির করেছিলাম যে "টুএক্স" ফাংশনটি (এবং আমার একটি "ফ্রমহেক্স" ফাংশনও রয়েছে) সত্যিই পুনর্নির্মাণ করা দরকার। পুরো প্রশ্নটি ছিল "আমি কীভাবে এটি আরও দক্ষতার সাথে করতে পারি?" আমি সিদ্ধান্ত নিয়েছি যে হেক্সাডেসিমাল ফাংশনটিতে / থেকে কোনও কিছু ভগ্নাংশের অংশ হিসাবে যত্ন নেওয়া উচিত নয় তবে একই সাথে এটিও নিশ্চিত করা উচিত যে ভগ্নাংশগুলি স্ট্রিংয়ের অন্তর্ভুক্ত রয়েছে।
তাহলে প্রশ্নটি হয়ে গেল, "আপনি কীভাবে জানেন যে আপনি একটি হেক্সাডেসিমাল স্ট্রিং নিয়ে কাজ করছেন?" উত্তরটি সহজ। স্ট্যান্ডার্ড প্রাক-স্ট্রিং তথ্য ব্যবহার করুন যা ইতিমধ্যে বিশ্বজুড়ে স্বীকৃত।
অন্য কথায় - "0x" ব্যবহার করুন। সুতরাং এখন আমার টুএক্স ফাংশনটি দেখতে আছে যে এটি ইতিমধ্যে আছে কিনা এবং এটি যদি থাকে - এটি কেবল তার কাছে প্রেরিত স্ট্রিংটি ফেরত দেয়। অন্যথায়, এটি স্ট্রিং, সংখ্যা, যাই হোক না কেন রূপান্তর করে। এখানে হেক্স ফাংশন সংশোধিত:
/////////////////////////////////////////////////////////////////////////////
// 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;
}
টোএক্স () ফাংশনের মতো, থেকেহেক্স () ফাংশনটি প্রথমে "0x" সন্ধান করে এবং তারপরে আগত তথ্যগুলি স্ট্রিংয়ে অনুবাদ করে যদি এটি ইতিমধ্যে স্ট্রিং না হয়। আমি জানি না এটি স্ট্রিংটি কীভাবে হবে না - তবে কেবল ক্ষেত্রে - আমি যাচাই করি। ফাংশনটি তখন দুটি অক্ষর ধরে এবং এএসসিআইআই অক্ষরগুলিতে অনুবাদ করে। আপনি যদি এটি ইউনিকোড অনুবাদ করতে চান তবে আপনাকে একবারে চারটি (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;
?>
জাভাস্ক্রিপ্ট কীভাবে টসস্ট্রিং () ফাংশনের ক্ষেত্রে কাজ করে, সেই সমস্ত সমস্যা দূর করা যেতে পারে যা আগে সমস্যা তৈরি করেছিল। এখন সমস্ত স্ট্রিং এবং সংখ্যা সহজেই রূপান্তর করা যায়। তদুপরি, অবজেক্টগুলির মতো জিনিসগুলি জাভাস্ক্রিপ্ট দ্বারা নিজেই ত্রুটি উত্পন্ন করবে। আমি বিশ্বাস করি এটি যতটা পায় ততটাই ভাল। জাভাস্ক্রিপ্টে কেবলমাত্র একটি টুএক্স () এবং থেকে হেক্স () ফাংশন অন্তর্ভুক্ত করার জন্য ডাব্লু 3 সি এর একমাত্র উন্নতি বাকি রয়েছে।
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
স্ট্রিং না থাকলে আপনি এখানে একটি সাধারণ castালাই করতে পারবেন না ।
var number = 3200;
var hexString = number.toString(16);
১ theটি মূলমাত্রা এবং হেক্সাডেসিমাল সংখ্যায় ১ values টি মান রয়েছে :-)
আগ্রহী প্রত্যেকের জন্য, এখানে একটি জেএসফিডেল এই প্রশ্নের দেওয়া বেশিরভাগ উত্তরের তুলনা করছে ।
এবং এখানে যে পদ্ধতিটি আমি শেষ করে দিয়েছি:
function decToHex(dec) {
return (dec + Math.pow(16, 6)).toString(16).substr(-6)
}
এছাড়াও, মনে রাখবেন যে আপনি যদি রঙিন ডেটা টাইপ হিসাবে সিএসএসে ব্যবহারের জন্য দশমিক থেকে হেক্সে রূপান্তর করতে চান তবে আপনি পরিবর্তে দশমিকের থেকে আরজিবি মানগুলি বের করতে এবং আরজিবি () ব্যবহার করতে পছন্দ করতে পারেন ।
উদাহরণস্বরূপ ( জেএসফিডাল ):
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
সিএসএস 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);
}
আমি যতদূর জানি মন্তব্য 57807 ভুল এবং ভালো কিছু হওয়া উচিত: Var হেক্স = নম্বর (ঘ) .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) তবে এখনও methodsণাত্মক মানগুলিকে সঠিকভাবে এনকোড করে এমন পদ্ধতিগুলি ছাড়িয়ে যেতে হবে।
গৃহীত উত্তর হিসাবে বলা হয়েছে, দশমিক থেকে হেক্সাডেসিমাল রূপান্তর করার সবচেয়ে সহজ উপায় 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;
}
তবে, যদি আপনাকে এটিকে শেষে কোনও পূর্ণসংখ্যায় (অর্থাত্ রঙের জন্য) রূপান্তর করতে না হয়, তবে মানগুলি নেতিবাচক নয় কিনা তা নিশ্চিত করে পর্যাপ্ত হওয়া উচিত।
আমি এটির নেতিবাচক বা ধনাত্মক কিনা তা যাচাই বাছাই করে একটি পরিষ্কার উত্তর খুঁজে পাইনি, এতে দু'জনের পরিপূরক (নেতিবাচক সংখ্যা অন্তর্ভুক্ত) ব্যবহার করা হয়। তার জন্য, আমি আমার বাইটে আমার সমাধানটি দেখাই:
((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();
আপনি যদি বৃহত্তর পূর্ণসংখ্যার অর্থাত্ সংখ্যার চেয়ে বড় সংখ্যার রূপান্তর করতে খুঁজছেন MA
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)}`);
}
পরীক্ষার ফলাফল:
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 যুক্ত করা হয়েছে x এমনকি অক্টাল)।
সুতরাং, স্ক্রিপ্ট-লেখার উদ্দেশ্যে, এই প্রশ্নের সঠিক উত্তর দেওয়ার জন্য আপনাকে অবশ্যই 0x উপসর্গ যুক্ত করতে হবে।
ম্যাথ.এবস (এন) ফাংশনটি নেতিবাচককে ধনাত্মক রূপান্তরিত করে এবং বোনাস হিসাবে, দেখে মনে হয় না যে কেউ এটি কাঠ-চিপার মাধ্যমে চালিয়েছিল।
আমি যে উত্তরটি চেয়েছিলাম তা ফিল্ড-প্রস্থের নির্দিষ্টকরণকারক থাকতে পারে, সুতরাং আমরা উদাহরণস্বরূপ 8/16/32/64-বিট মানগুলি যেভাবে আপনি হেক্সাডেসিমাল সম্পাদনা অ্যাপ্লিকেশনটিতে তালিকাভুক্ত দেখতে পাবেন তা প্রদর্শন করতে পারি। এটি, আসল, সঠিক উত্তর।
Number('0xFF') === 255;
আপনারা যারা বিপরীত ক্রিয়াকলাপ চান সেখানে ol