Các triển khai hệ điều hành Unix-like như Linux và hầu hết bộ GNU bao gồm ngôn ngữ máy tính cơ bản bc. Cú pháp rất giống ngôn ngữ C. Bạn có thể dùng nó như máy tính hex trực tiếp từ dòng lệnh – không bao giờ cần tải app hex/octal cho điện thoại.
Tin tốt cho lập trình viên và người làm bài tập. Cần terminal: Ctrl+Alt+T hoặc tìm "terminal" trên Ubuntu Unity Dash. Menu Whisker/Ứng dụng > Công cụ hệ thống. Người dùng macOS mở terminal từ thư mục Utilities hoặc dock nếu ghim. bc có trên hầu hết Unix-like hiện nay, không chỉ Linux.
Phương pháp 1: Dùng bc chuyển đổi số thập phân và hexadecimal
Gõ:
echo 'obase=16;127' | bc
chuyển số 127 sang hex từ cơ số 10. Tự nhiên thay 127 bằng bất kỳ số nguyên nào. Kết quả 7F. Muốn chuyển ngược về cơ số 10, gõ:
echo 'ibase=16;obase=A;7F' | bc
Enter. Đơn giản và dùng bất cứ lúc nào với số hex hợp lệ. Là lệnh Unix chuẩn, có thể tích hợp vào shell script. Dễ nhớ dùng từ dòng lệnh khi cần chuyển đổi nhanh.
Phương pháp 2: Chuyển đổi nhị phân và hex với máy tính hex bc
Tại dấu nhắc gõ:
echo 'obase=16;ibase=2;111010001' | bc
chuyển số nhị phân sang hex. Enter nhận 1D1. Thay dãy nhị phân bằng số cần chuyển. Ngược lại cũng đúng: dùng máy tính hex chuyển hex sang nhị phân. Gõ:
echo 'obase=2;ibase=16;1D1' | bc
Enter lấy số gốc, thay 1D1 bằng giá trị hex hợp lệ khác.
Nếu dùng thường, nhớ hai điểm. Một: chữ cái trong số hex phải viết HOA, vì bc coi chữ thường là biến đại số. Hai: tất cả lệnh chạy bằng user thường, không cần root trên Linux/Unix hiện đại.
Phương pháp 3: Dùng bc như máy tính hex đầy đủ
Cũng dùng bc làm máy tính hex thực hiện phép tính nếu cần. Hầu hết không cần, nhưng lập trình viên có thể cần tìm hiệu giữa hai vị trí bộ nhớ. Câu hỏi phổ biến cho bài tập khoa học máy tính cấp 2/đại học!
Giả sử số hex EE65522D trừ C3EFAF86. Gõ:
echo 'ibase=16;EE65522D-C3EFAF86' | bc
Enter tìm đáp án. Muốn kết quả hex, gõ:
echo 'obase=16;ibase=16;EE65522D-C3EFAF86' | bc
Các phép toán khác cũng được. Ví dụ: echo 'obase=16;ibase=16;EE65522D*C3EFAF86' | bc nhân hai giá trị. Dùng + cho cộng. / cho chia không trả về dư; dùng % cho modulus.
Ví dụ: echo 'obase=16;ibase=16;EE65522D%C3EFAF86' | bc trả về 2A75A2A7, vì thương phương trình là 1 dư 2A75A2A7 qua máy tính hex. Chạy / trước rồi % để tìm cả hai giá trị.