การแปลงฐานทำงานอย่างไร
ระบบตัวเลขเชิงตำแหน่งทุกระบบแสดงค่าเป็นผลรวมของหลักที่คูณด้วยกำลังของฐาน การเปลี่ยนฐานหมายถึงการเขียนค่าเดิมใหม่บนอนุกรมกำลังต่างกัน
- ตรวจสอบชุดอักขระที่ป้อน. แต่ละฐานรับชุดหลักเฉพาะ ไบนารีรับ 0 และ 1 ออกทัลรับ 0-7 เดซิมัลรับ 0-9 เฮกซ์รับ 0-9 และ A-F อักขระที่อยู่นอกชุดที่เลือกจะแสดงข้อผิดพลาดแบบอินไลน์ก่อนที่จะมีการแปลงใด ๆ
- วิเคราะห์ค่า. สำหรับค่าที่พอดีกับ JavaScript Number (ถึง 2^53-1) เครื่องมือจะเรียก
parseInt(text, base)เหนือขอบเขตนั้นจะใช้BigIntเพื่อให้การแปลงแม่นยำสำหรับจำนวนเต็มขนาดใหญ่ตามต้องการ - แสดงผลในทุกฐานเป้าหมาย. ค่าที่วิเคราะห์แล้วจะถูกแปลงเป็นแต่ละฐานผลลัพธ์ผ่าน
Number.prototype.toString(base)หรือBigInt.prototype.toString(base)ช่องมาตรฐานทั้งสี่ (ไบนารี ออกทัล เดซิมัล เฮกซ์) และช่องฐานกำหนดเองจะอัปเดตพร้อมกัน - ใช้การจัดรูปแบบ. การสลับคำนำหน้าเพิ่ม 0b, 0o หรือ 0x ไว้ด้านหน้าผลลัพธ์ไบนารี ออกทัล และเฮกซ์ การจัดกลุ่มหลักแทรกเครื่องหมายขีดล่างทุกสี่หลักในไบนารีและทุกสองหลักในเฮกซ์ การสลับตัวพิมพ์เฮกซ์เลือกตัวพิมพ์ใหญ่หรือเล็กสำหรับ A-F
- ซิงค์ข้ามช่องแบบสด. การแก้ไขช่องใดก็ตามจะทริกเกอร์การแปลงใหม่แบบ debounce 100 ms ที่อัปเดตช่องอื่น ช่องที่คุณกำลังพิมพ์อยู่จะถือเป็นแหล่งความจริงในแต่ละการกดปุ่ม
ทำไมจึงใช้ตัวแปลงฐาน
- อ่าน memory dump. โปรแกรมดีบัก, disassembler และ core-dump viewer แสดงที่อยู่และค่า register ในเฮกซ์ การแปลงเป็นเดซิมัลทำให้เปรียบเทียบกับจำนวน ขนาด และ offset ที่รายงานในที่อื่นของ trace เดียวกันได้
- ทำงานกับรหัสสี. CSS, เครื่องมือออกแบบ และรูปแบบรูปภาพระบุสีด้วย hex triplet เช่น #d2511a การแปลงแต่ละคู่เป็นเดซิมัลเปลี่ยนสีเดียวกันเป็นรูปแบบ rgb(210, 81, 26) ที่ color picker หรือ accessibility checker คาดหวัง
- ถอดรหัสสิทธิ์ไฟล์. ค่า Unix chmod เขียนในออกทัล: 755 หมายถึง rwxr-xr-x เมื่อคุณแปลงหลักออกทัลแต่ละตัวเป็นสามบิตไบนารี ตัวแปลงแสดงการแมปนั้นในขั้นตอนเดียวเพื่อตรวจสอบชุดสิทธิ์โดยไม่ต้องเปิด man page
- ดีบัก bit flag. โปรโตคอลเครือข่าย, syscall ของ kernel และ hardware register บรรจุ flag บูลีนหลายตัวในจำนวนเต็มเดียว การอ่านจำนวนเต็มในไบนารีแสดงบิตที่ถูกตั้งค่าได้ทันที ซึ่งเป็นสิ่งที่ต้องการเมื่อตามหาว่าทำไม flag ถึงไม่ทำงาน
การใช้งานทั่วไป
การแปลงฐานปรากฏในงานประจำวันของนักพัฒนา, security และ hardware เมื่อตัวเลขมีความหมายมากกว่าแค่การนับ
- Embedded firmware: อ่าน hex dump จาก JTAG probe, หาที่อยู่ฟังก์ชัน และเขียนคำสั่ง breakpoint โดยใช้ decimal offset ที่สคริปต์ดีบักรับ
- Network security: แยกวิเคราะห์ netmask 32 บิตที่พิมพ์ใน dotted-decimal กลับเป็นไบนารีเพื่อนับความยาว prefix แล้วเขียนรูปแบบ CIDR สำหรับกฎ ACL
- CTF และ crypto challenge: สลับระหว่างเฮกซ์ เดซิมัล และไบนารีขณะเปรียบเทียบ key fragment ที่รั่วไหลกับ candidate plaintext ภายใต้ XOR
ตัวอย่างแบบ step-by-step
พิมพ์ 255 ลงในช่องเดซิมัล ช่องเฮกซ์จะอัปเดตเป็น FF (หรือ 0xFF เมื่อเปิดคำนำหน้า) ช่องไบนารีเป็น 11111111 (จัดกลุ่มเป็น 1111_1111) และช่องออกทัลเป็น 377 เปลี่ยน radix ของช่องกำหนดเองเป็น 36 และค่าเดียวกันแสดงเป็น 73 ลองพิมพ์ค่าขนาดใหญ่มาก เช่น 123456789012345678901234567890 ลงในช่องเดซิมัล ช่องเฮกซ์จะใช้เส้นทาง BigInt และแสดง 18EE90FF6C373E0EE4E3F0AD2
FAQ
ฐานตัวเลขคืออะไร?
ฐานตัวเลข หรือ radix คือจำนวนหลักที่แตกต่างกันที่ระบบเชิงตำแหน่งใช้ก่อนจะทดไปยังตำแหน่งถัดไป เดซิมัล (ฐาน 10) ใช้ 0-9 ไบนารี (ฐาน 2) ใช้เพียง 0 และ 1 เฮกซาเดซิมัล (ฐาน 16) ใช้ 0-9 บวก A-F ค่าของตัวเลขไม่เปลี่ยนแปลงเมื่อเปลี่ยนฐาน — เปลี่ยนเพียงวิธีเขียนและจัดกลุ่มหลักเท่านั้น
ทำไมจึงใช้เลขฐานสิบหกในการเขียนโปรแกรม?
หนึ่งหลักเฮกซ์แมปกับสี่บิตไบนารีพอดี ดังนั้นสองหลักเฮกซ์ครอบคลุมหนึ่งไบต์และแปดหลักเฮกซ์ครอบคลุมคำ 32 บิต ทำให้เฮกซ์เป็นรูปแบบที่กะทัดรัดที่สุดที่มนุษย์อ่านได้สำหรับที่อยู่หน่วยความจำ เนื้อหา register, สี triplet และคีย์เข้ารหัสลับ การอ่าน 0xFF เร็วกว่าการอ่าน 11111111 และรูปแบบบิตอยู่ตรงนั้นเมื่อต้องการ
แปลงเกินฐาน 36 ได้ไหม?
เครื่องมือนี้หยุดที่ฐาน 36 เพราะนั่นคือขีดสูงสุดของ JavaScript parseInt และ toString API ดั้งเดิม ซึ่งรับ 0-9 ตามด้วย A-Z เป็นชุดอักขระหลัก ฐาน 37-62 เป็นไปได้ด้วยชุดอักขระกำหนดเอง (Base58 ที่ใช้ใน Bitcoin address เป็นตัวอย่างหนึ่ง) แต่ถูกติดตามเป็นเครื่องมือแยกต่างหากเนื่องจากแต่ละฐานที่สูงกว่าต้องการลำดับหลักตามมาตรฐานของตัวเอง
รองรับจำนวนลบและทศนิยมได้ไหม?
จำนวนเต็มลบจะแสดงด้วยเครื่องหมายลบนำหน้าในทุกฐาน ซึ่งเป็นลักษณะการทำงานเดียวกับ Number.prototype.toString การแสดงแบบ Two’s-complement ข้ามความกว้างบิตที่เลือก (8, 16, 32, 64) เป็น view แยกที่วางแผนจะเพิ่ม การแปลงฐานทศนิยมอยู่นอกขอบเขตของเวอร์ชันนี้ เครื่องมือรองรับเฉพาะค่าจำนวนเต็ม
การแปลงฐานเป็นงานเล็ก ๆ ที่เกิดขึ้นซ้ำ ๆ ใน firmware, security และงานกราฟิก การทำในแท็บเบราว์เซอร์ด้วย arithmetic primitive เดียวกับที่ Node และ V8 ใช้ ทำให้งานรวดเร็วและข้อมูลอยู่บนเครื่องของคุณ