ভূমিকা
স্ট্যান্ডার্ড হেক্সাডেসিমাল (Base-16) এ `0123456789ABCDEF` ক্যারেক্টার সেট ব্যবহার হয়। এই আর্টিকেলে ইউজার নিজের কাস্টম ১৬-ক্যারেক্টার সেট দিয়ে ডেসিমল থেকে হেক্স কনভার্সন করার রিকারসিভ ফাংশন দেখানো হয়েছে।
সম্পূর্ণ কোড
const num = 363;
const toHex = (
num,
hexString = '0123456789ABCDEF',
hex = '',
isNegative = num < 0
) => {
if (hexString.length !== 16) {
return false; // কাস্টম সেট অবশ্যই ১৬ ক্যারেক্টার হতে হবে
}
num = Math.abs(num);
if (num && typeof num === 'number') {
// রিকারসিভলি রিমেন্ডার অ্যাপেন্ড করুন এবং num ১৬ দিয়ে ভাগ করুন
return toHex(Math.floor(num / 16), hexString, `${hexString[num % 16]}${hex}`, isNegative);
}
return isNegative ? `-${hex}` : hex;
};
console.log(toHex(num, 'QWERTYUIOPASDFGH')); // WUS
console.log(toHex(num)); // 16B
console.log(toHex(num, 'QAZWSX0123456789')); // A05
কোড ব্যাখ্যা
- ভ্যালিডেশন: কাস্টম সেট অবশ্যই ১৬ ক্যারেক্টার
- অবсолют ভ্যালু: নেগেটিভ হ্যান্ডলিং için `isNegative` ফ্ল্যাগ
- রিকারসিভ লজিক:
- `num % 16` - রিমেন্ডার (০-১৫)
- `hexString[remainder]` - কাস্টম ক্যারেক্টার পিক
- প্রিফিক্স করুন (`${char}${hex}`) - কারণ রিকারশন লিস্ট বিল্ড করে
- `Math.floor(num / 16)` - পরবর্তী রিকারসিভ কল
- বেস কেস: `num === 0` হলে রিকারশন বন্ধ
- নেগেটিভ হ্যান্ডল: প্রিফিক্স `-` যোগ
এক্সএমপ্লে ট্রেস (363, Стандар্ড হেক্স)
363 ÷ 16 = 22 remainder 11 (B) → hex = "B"
22 ÷ 16 = 1 remainder 6 (6) → hex = "6B"
1 ÷ 16 = 0 remainder 1 (1) → hex = "16B"
Result: "16B"
কাস্টম ম্যাপিং উদাহরণ
| Custom Set | Mapping | 363 → |
|---|---|---|
| QWERTYUIOPASDFGH | 0=Q, 1=W, 2=E, 3=R, 4=T, 5=Y, 6=U, 7=I, 8=O, 9=P, 10=A, 11=S, 12=D, 13=F, 14=G, 15=H | WUS (1=W, 6=U, 11=S) |
| QAZWSX0123456789 | 0=Q, 1=A, 2=Z, 3=W, 4=S, 5=X, 6=0, 7=1, 8=2, 9=3, 10=4, 11=5, 12=6, 13=7, 14=8, 15=9 | A05 (1=A, 6=0, 11=5) |
আউটপুট
WUS
16B
A05
আধুনিক বিকল্প পদ্ধতিগুলো
১. বিল্ট-ইন toString(16) + ম্যাপ (নন-রিকারসিভ)
const toHexCustom = (num, charset = '0123456789ABCDEF') => {
if (charset.length !== 16) return false;
const standard = num.toString(16).toUpperCase();
return standard.split('').map(c => charset[parseInt(c, 16)]).join('');
};
২. ইটারেটিভ (স্ট্যাক সেফ)
const toHexIterative = (num, charset = '0123456789ABCDEF') => {
if (charset.length !== 16) return false;
if (num === 0) return charset[0];
const neg = num < 0;
num = Math.abs(num);
let hex = '';
while (num > 0) {
hex = charset[num % 16] + hex;
num = Math.floor(num / 16);
}
return neg ? '-' + hex : hex;
};
ব্যবহারিক অ্যাপ্লিকেশন
- অবফাসকেশন: কোড/ডেটা লুকাতে কাস্টম এনকোডিং
- শর্ট URL: বেস-৬২/বেস-৩৬ এনকোডিং (আলফানিউমেরিক)
- গেমিং: ইভেন্ট আইডি, সেভ কোড
- লাইসেন্স কী: মানব-পঠনযোগ্য কাস্টম ফরম্যাট
সারাংশ
রিকারসিভ পদ্ধতি অ্যালগরিদম বোঝার জন্য ভালো, কিন্তু প্রোডাকশনে ইটেরেটিভ বা বিল্ট-ইন `toString(16)` + ম্যাপিং ব্যবহার করুন। কাস্টম чарসেট ভ্যালিডেশন (১৬ ক্যারেক্টার) বাধ্যতামূলক।