ปัญหา
พิจารณาที่อยู่ IPv4 ดังนี้:
128.32.10.1
แปลงเป็นทวินิยม:
10000000.00100000.00001010.00000001
แปลงเป็นทศนิยม 32-bit ไม่มีเครื่องหมาย:
2149583361
ดังนั้น IPv4 เทียบเท่าของ 2149583361 คือ 128.32.10.1
เราต้องเขียนฟังก์ชัน JavaScript ที่รับจำนวนเต็ม 32-bit ไม่มีเครื่องหมาย และคืนค่าที่อยู่ IPv4 เทียบเท่า
ตัวอย่าง
โค้ดตัวอย่างด้านล่าง:
const num = 2149583361;
const int32ToIp = (num) => {
return (num >>> 24 & 0xFF) + '.' +
(num >>> 16 & 0xFF) + '.' +
(num >>> 8 & 0xFF) + '.' +
(num & 0xFF);
};
console.log(int32ToIp(num));
ผลลัพธ์
128.32.10.1
คำอธิบายเพิ่มเติม
ใช้ unsigned right shift (>>>) และ bitwise AND (& 0xFF) เพื่อดึงแต่ละ octet การใช้ >>> สำคัญเพราะ JavaScript bitwise operators ทำงานกับ signed 32-bit แต่ >>> จัดการเป็น unsigned