§

Options

§

ไบนารี (ฐาน 2)

§

ออกทัล (ฐาน 8)

§

เดซิมัล (ฐาน 10)

§

เฮกซาเดซิมัล (ฐาน 16)

§

ฐานกำหนดเอง

ภาควิชาวิศวกรรมคอมพิวเตอร์ จุฬาลงกรณ์มหาวิทยาลัย ใช้การแปลงฐานตัวเลขเป็นแกนหลักในวิชา IEEE 754 นักศึกษาต้องอ่านรูปแบบ 32 บิตและแยกส่วน sign, exponent กับ mantissa GISTDA ใช้สตรีม hex telemetry จากดาวเทียม THEOS เพื่อ debug คำสั่งควบคุม ขณะที่ NIA สนับสนุน startup ด้าน IoT ที่วิเคราะห์ firmware ฐาน 16 เพื่อตรวจสอบ register ของไมโครคอนโทรลเลอร์ เครื่องมือนี้จัดการส่วนคำนวณให้ วิศวกรจึงมีเวลาโฟกัสที่การตีความ

การแปลงฐานทำงานอย่างไร

ระบบตัวเลขเชิงตำแหน่งทุกระบบแสดงค่าเป็นผลรวมของหลักที่คูณด้วยกำลังของฐาน การเปลี่ยนฐานหมายถึงการเขียนค่าเดิมใหม่บนอนุกรมกำลังต่างกัน

  1. ตรวจสอบชุดอักขระที่ป้อน. แต่ละฐานรับชุดหลักเฉพาะ ไบนารีรับ 0 และ 1 ออกทัลรับ 0-7 เดซิมัลรับ 0-9 เฮกซ์รับ 0-9 และ A-F อักขระที่อยู่นอกชุดที่เลือกจะแสดงข้อผิดพลาดแบบอินไลน์ก่อนที่จะมีการแปลงใด ๆ
  2. วิเคราะห์ค่า. สำหรับค่าที่พอดีกับ JavaScript Number (ถึง 2^53-1) เครื่องมือจะเรียก parseInt(text, base) เหนือขอบเขตนั้นจะใช้ BigInt เพื่อให้การแปลงแม่นยำสำหรับจำนวนเต็มขนาดใหญ่ตามต้องการ
  3. แสดงผลในทุกฐานเป้าหมาย. ค่าที่วิเคราะห์แล้วจะถูกแปลงเป็นแต่ละฐานผลลัพธ์ผ่าน Number.prototype.toString(base) หรือ BigInt.prototype.toString(base) ช่องมาตรฐานทั้งสี่ (ไบนารี ออกทัล เดซิมัล เฮกซ์) และช่องฐานกำหนดเองจะอัปเดตพร้อมกัน
  4. ใช้การจัดรูปแบบ. การสลับคำนำหน้าเพิ่ม 0b, 0o หรือ 0x ไว้ด้านหน้าผลลัพธ์ไบนารี ออกทัล และเฮกซ์ การจัดกลุ่มหลักแทรกเครื่องหมายขีดล่างทุกสี่หลักในไบนารีและทุกสองหลักในเฮกซ์ การสลับตัวพิมพ์เฮกซ์เลือกตัวพิมพ์ใหญ่หรือเล็กสำหรับ A-F
  5. ซิงค์ข้ามช่องแบบสด. การแก้ไขช่องใดก็ตามจะทริกเกอร์การแปลงใหม่แบบ 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 ใช้ ทำให้งานรวดเร็วและข้อมูลอยู่บนเครื่องของคุณ