วิธีใช้งาน
- เลือก “เข้ารหัส” เพื่อแปลงข้อความเป็นเลขฐานแปด หรือ “ถอดรหัส” เพื่อแปลงค่าเลขฐานแปดกลับเป็นข้อความ
- พิมพ์หรือวางอินพุต หรือเปิดไฟล์เพื่อแปลงไบต์ของไฟล์นั้น
- เลือก “ตัวคั่น” สำหรับเอาต์พุต ได้แก่ “ช่องว่าง” “ไม่มี” “จุลภาค” หรือ “ขึ้นบรรทัดใหม่”
- คัดลอกผลลัพธ์หรือดาวน์โหลดเป็นไฟล์
เลขฐานแปดคืออะไร
เลขฐานแปด (Octal หรือ Base8) เขียนตัวเลขด้วยหลัก 0 ถึง 7 เลขฐานแปดแต่ละหลักแทนสามบิตพอดี จึงเป็นที่นิยมในคอมพิวเตอร์ยุคแรกที่มีขนาดเวิร์ดเป็นพหุคูณของสาม เช่น PDP-8 แบบ 12 บิต และ PDP-10 แบบ 36 บิต ปัจจุบันยังพบได้ส่วนใหญ่ใน escape sequence และสิทธิ์ของไฟล์บน Unix
ไบต์หนึ่งเก็บค่าได้ตั้งแต่ 0 ถึง 255 ซึ่งเท่ากับ 0 ถึง 377 ในเลขฐานแปด ตัวแปลงนี้เขียนทุกไบต์ของอินพุตเป็นเลขฐานแปดสามหลักพอดีโดยเติมเลขศูนย์นำหน้า ทุกกลุ่มจึงกว้างเท่ากันและนำมาต่อกันได้โดยไม่ต้องมีตัวคั่น ข้อความจะถูกแปลงเป็นไบต์ด้วยการเข้ารหัสอักขระที่เลือกไว้ก่อน โดย ASCII ทั่วไปใช้อักขระละหนึ่งไบต์ ส่วนอักษรอื่นใน UTF-8 ใช้อักขระละสองถึงสี่ไบต์
Escape sequence แบบเลขฐานแปด
ภาษา C, C++, Python, Perl และคำสั่ง printf ของเชลล์ให้คุณเขียนไบต์เป็นแบ็กสแลชตามด้วยเลขฐานแปดไม่เกินสามหลัก เช่น \101 คือตัวอักษร A และ \012 คืออักขระขึ้นบรรทัดใหม่ (line feed)
เครื่องมือนี้แสดงผลเป็นตัวเลขล้วนโดยไม่มีแบ็กสแลช หากต้องการสร้างสตริงแบบ escape ให้ใช้เอาต์พุตที่คั่นด้วยช่องว่าง แทนที่ช่องว่างแต่ละช่องด้วยแบ็กสแลช แล้วเติมแบ็กสแลชหน้ากลุ่มแรกอีกหนึ่งตัว หากต้องการถอดรหัส escape sequence ให้ทำย้อนกลับโดยแทนที่แบ็กสแลชด้วยช่องว่าง เพราะตัวถอดรหัสรับเฉพาะตัวเลขและตัวคั่นเท่านั้น
สิทธิ์ของไฟล์อย่าง 755 ก็เป็นเลขฐานแปดเช่นกัน แต่เป็นตัวเลข ไม่ใช่ข้อความ หากต้องการแปลงตัวเลขลักษณะนี้เป็นเลขฐานสองหรือเลขฐานสิบ ให้ใช้ ตัวแปลงเลขฐาน
เลขฐานแปดในโค้ด
# Python
' '.join(f'{b:03o}' for b in 'Hi'.encode()) # '110 151'
bytes(int(o, 8) for o in '110 151'.split()).decode() # 'Hi'
# Shell
printf '\110\151\n' # แสดงผล Hi
printf 'Hi' | od -An -to1 # 110 151
ข้อกำหนด
| ชุดตัวอักษร | 0-7 |
|---|---|
| ขนาดเอาต์พุต | 3 หลักต่อไบต์ (300%) |
| แพดดิง | ไม่มี |
| มาตรฐาน | เลขฐานแปดแบบค่าประจำหลัก |
| แยกตัวพิมพ์เล็ก-ใหญ่ | ไม่ใช่ |
ตัวอย่าง
| อินพุต (UTF-8) | เอาต์พุต |
|---|---|
Hello, World! | 110 145 154 154 157 054 040 127 157 162 154 144 041 |
Base64.is | 102 141 163 145 066 064 056 151 163 |
你好 | 344 275 240 345 245 275 |
คำถามที่พบบ่อย
ทำไมทุกไบต์จึงมีเลขฐานแปดสามหลัก
ค่าไบต์ที่มากที่สุดคือ 255 ซึ่งเท่ากับ 377 ในเลขฐานแปด สามหลักจึงเพียงพอเสมอ การเติมเลขศูนย์นำหน้าให้ค่าที่น้อยกว่าทำให้ทุกกลุ่มกว้างเท่ากัน ซึ่งเป็นสิ่งที่ทำให้แบ่งสตริงที่ไม่มีตัวคั่นกลับเป็นไบต์ได้
จะถอดรหัสเลขฐานแปดที่ไม่มีช่องว่างได้อย่างไร
วางตัวเลขเป็นสตริงต่อเนื่องสตริงเดียว ตัวถอดรหัสจะแบ่งเป็นกลุ่มละสามหลัก ความยาวจึงต้องเป็นพหุคูณของ 3 หากบางค่ามีไม่ถึงสามหลัก ให้คั่นค่าเหล่านั้นด้วยช่องว่าง จุลภาค หรือการขึ้นบรรทัดใหม่แทน
ทำไมค่าอย่าง 400 จึงถูกปฏิเสธ
เลขฐานแปด 400 เท่ากับ 256 ซึ่งเกินกว่าที่ไบต์หนึ่งจะเก็บได้ ค่าไบต์ที่ใช้ได้อยู่ระหว่าง 0 ถึง 377 และตัวถอดรหัสจะแจ้งตำแหน่งของกลุ่มที่อยู่นอกช่วงนี้ ส่วนเลข 8 และ 9 ไม่ใช่หลักของเลขฐานแปดเลย
ขอค่าเลขฐานแปดสำหรับชุดอักขระอื่นได้หรือไม่
ได้ เลือกชุดอักขระที่ต้องการในเมนู “การเข้ารหัสอักขระ” เช่น Windows-1252 หรือ ISO-8859-1 สำหรับอักขระภาษายุโรปตะวันตกตัวละหนึ่งไบต์ หรือ GBK หรือ Shift_JIS สำหรับข้อความภาษาจีนและญี่ปุ่น