Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

การแปลงทศนิยม 32-bit ไม่มีเครื่องหมายเป็น IPv4 ใน JavaScript

ปัญหา

พิจารณาที่อยู่ 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