ตัวแปลงข้อความเป็นเลขฐานแปดและเลขฐานแปดเป็นข้อความ

เขียนแต่ละไบต์ของข้อความเป็นเลขฐานแปดสามหลัก หรือแปลงรายการค่าไบต์เลขฐานแปดกลับเป็นข้อความที่อ่านได้ ใช้ได้กับ UTF-8 และชุดอักขระรุ่นเก่าอีกหลายแบบ

ทำงานภายในเบราว์เซอร์ของคุณทั้งหมด ไม่มีการอัปโหลดข้อมูลใด ๆ

วิธีใช้งาน

  1. เลือก “เข้ารหัส” เพื่อแปลงข้อความเป็นเลขฐานแปด หรือ “ถอดรหัส” เพื่อแปลงค่าเลขฐานแปดกลับเป็นข้อความ
  2. พิมพ์หรือวางอินพุต หรือเปิดไฟล์เพื่อแปลงไบต์ของไฟล์นั้น
  3. เลือก “ตัวคั่น” สำหรับเอาต์พุต ได้แก่ “ช่องว่าง” “ไม่มี” “จุลภาค” หรือ “ขึ้นบรรทัดใหม่”
  4. คัดลอกผลลัพธ์หรือดาวน์โหลดเป็นไฟล์

เลขฐานแปดคืออะไร

เลขฐานแปด (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.is102 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 สำหรับข้อความภาษาจีนและญี่ปุ่น