Chuyển đến nội dung

Chuyển đổi hệ cơ số: Thập phân, Hex, Base32, Base64

Chuyển đổi số giữa thập phân, Base16 (hex), Base32 và Base64 theo hai chiều, có tự động phát hiện hệ cơ số. Mã hóa số thập phân hoặc giải mã giá trị đã mã hóa.

Bộ Chuyển Đổi Cơ Số Hai Chiều

Chuyển đổi giữa số thập phân và mã hóa cơ số tiêu chuẩn (Hex/Cơ số 16, Cơ số 32, Cơ số 64). Nhập giá trị vào một trong hai ô để chuyển đổi.

Nhập số nguyên dương (tối đa: 9.007.199.254.740.991)

Nhập giá trị được mã hóa ở Cơ số 16, Cơ số 32 hoặc Cơ số 64

Về Mã Hóa Cơ Số

Cơ Số 16 (Thập Lục Phân): Sử dụng các ký tự 0-9 và A-F. Mỗi ký tự đại diện cho 4 bit. Thường được sử dụng cho mã màu và địa chỉ bộ nhớ.
Cơ Số 32: Sử dụng các ký tự A-Z và 2-7. Mỗi ký tự đại diện cho 5 bit. Không phân biệt chữ hoa/thường và dễ đọc.
Cơ Số 64: Sử dụng các ký tự A-Z, a-z, 0-9, +, và /. Mỗi ký tự đại diện cho 6 bit. Thường được sử dụng để mã hóa dữ liệu nhị phân thành văn bản.
Giới Hạn Số Nguyên An Toàn: JavaScript có thể biểu diễn an toàn các số nguyên lên đến 9.007.199.254.740.991 (2^53 - 1) mà không mất độ chính xác.
Máy tính tải...
📚

Tài liệu hướng dẫn

Bộ chuyển đổi cơ số hai chiều

Bộ chuyển đổi cơ số thay đổi cách viết một số mà không thay đổi bản thân số đó. Công cụ này chuyển đổi một số thập phân sang Cơ số 16 (thập lục phân), Cơ số 32 hoặc Cơ số 64, đồng thời chuyển một giá trị đã mã hóa trở lại dạng thập phân. Công cụ cũng phát hiện giá trị được dán vào dùng cách nào trong ba cách mã hóa đó.

Cơ số của một số là gì

Cơ số, còn gọi là radix, là số lượng ký hiệu khác nhau mà một hệ thống số sử dụng cho một chữ số. Hệ thập phân là cơ số 10 và sử dụng các chữ số từ 0 đến 9. Máy tính thường lưu trữ số ở các cơ số khác vì những cơ số đó biểu diễn cùng một giá trị bằng ít ký tự hơn, hoặc vì bộ ký tự của chúng an toàn khi truyền qua các hệ thống chỉ xử lý văn bản như email hoặc URL.

Công cụ này hỗ trợ ba cơ số như vậy:

  • Cơ số 16 (thập lục phân). Sử dụng 16 ký hiệu 0–9 và A–F. Mỗi ký tự lưu trữ 4 bit. Thường được dùng trong mã màu, địa chỉ bộ nhớ và giá trị băm.
  • Cơ số 32. Sử dụng 32 ký hiệu A–Z và 2–7, được định nghĩa bởi tiêu chuẩn Internet RFC 4648. Mỗi ký tự lưu trữ 5 bit. Cách này tránh các chữ cái và chữ số dễ nhìn nhầm, chẳng hạn 0 và O, nên dễ đọc thành tiếng hoặc nhập thủ công hơn.
  • Cơ số 64. Sử dụng 64 ký hiệu: A–Z, a–z, 0–9, + và /, cũng được định nghĩa bởi RFC 4648. Mỗi ký tự lưu trữ 6 bit. Đây là cách tiêu chuẩn để nhúng dữ liệu nhị phân vào văn bản, chẳng hạn như tệp đính kèm email hoặc trường JSON.

Cách chuyển đổi số thập phân sang Cơ số 16, Cơ số 32 hoặc Cơ số 64

Trước tiên, công cụ chia số thập phân thành các byte, mỗi byte gồm 8 bit, được ghi theo thứ tự big-endian (byte có trọng số lớn nhất đứng trước). Sau đó, công cụ đọc các bit theo từng nhóm có kích thước phù hợp với cơ số đích: mỗi lần 4 bit đối với Cơ số 16, 5 bit đối với Cơ số 32 hoặc 6 bit đối với Cơ số 64. Mỗi nhóm bit được tra trong bảng ký hiệu của cơ số đó để tạo thành một ký tự đầu ra.

Vì Cơ số 32 và Cơ số 64 đọc các bit theo nhóm 5 hoặc 6 bit, nhóm cuối cùng của một số thường không kết thúc đúng tại ranh giới byte 8 bit. Công cụ bổ sung các bit còn thiếu bằng các số không và, đối với Cơ số 32 và Cơ số 64, thêm các ký tự = ở cuối để độ dài đầu ra luôn là bội số của 8 ký tự (Cơ số 32) hoặc 4 ký tự (Cơ số 64).

Cơ số 16 luôn sử dụng một số nguyên các cặp ký tự 2, mỗi cặp tương ứng với một byte. Giá trị cần một số lẻ chữ số thập lục phân sẽ được thêm số 0 ở đầu, để chuỗi luôn biểu diễn một số lượng byte nguyên.

Công thức và ví dụ về Cơ số 16

Mỗi byte trở thành đúng hai chữ số thập lục phân, có giá trị bằng 16 lần chữ số thứ nhất cộng với chữ số thứ hai:

v=a×16+bv = a \times 16 + b

trong đó v là giá trị byte, a là chữ số thập lục phân thứ nhất và b là chữ số thứ hai.

Ví dụ: 255 ở dạng thập phân. 255 vừa trong một byte. 255 ÷ 16 = 15 dư 15, và 15 được viết là F, nên 255 trở thành FF. Đây là lý do mã màu #FFFFFF có màu trắng: ba byte, mỗi byte đều có giá trị lớn nhất.

Ví dụ: 1000 ở dạng thập phân. 1000 cần hai byte: 1000 = 3 × 256 + 232. Byte thứ nhất, 3, trở thành 03. Byte thứ hai, 232, bằng 14 × 16 + 8, và trở thành E8. Khi ghép lại, 1000 ở Cơ số 16 là 03E8, không phải 3E8 — đầu ra thập lục phân luôn được đệm thành số nguyên byte, nên một giá trị nhỏ hơn 16 ở byte đầu tiên vẫn được thêm số 0 ở đầu.

Ví dụ về Cơ số 32 và Cơ số 64

Sử dụng cùng hai số như trên:

Thập phânCơ số 16Cơ số 32Cơ số 64
255FF74======/w==
100003E8APUA====A+g=

Cách chuyển đổi một giá trị đã mã hóa trở lại dạng thập phân

Dán chuỗi Cơ số 16, Cơ số 32 hoặc Cơ số 64 vào trường giá trị đã mã hóa, sau đó chọn cơ số đó từ danh sách thả xuống bên cạnh. Công cụ kiểm tra các ký tự với bảng chữ cái của cơ số tương ứng, đảo ngược các bước trên và hiển thị giá trị thập phân. Giải mã FF theo Cơ số 16 cho kết quả 255.

Công cụ cũng cho biết cơ số mà một giá trị được dán vào có vẻ sử dụng. Tên đó chỉ mang tính gợi ý. Danh sách thả xuống vẫn quyết định cách đọc giá trị, vì bảng chữ cái Cơ số 16 là một phần của bảng chữ cái Cơ số 32, và một chuỗi ngắn như ABCD là giá trị hợp lệ trong cả hai cơ số.

Dữ liệu đầu vào Cơ số 16 có thể trộn chữ hoa và chữ thường; công cụ xử lý ff và FF như nhau. Số lẻ chữ số thập lục phân được đọc theo giá trị vị trí, với một số 0 ở đầu được giả định, nên 1F4 và 01F4 đều cho kết quả 500. Dữ liệu đầu vào Cơ số 32 phải được nhập bằng chữ hoa: bộ giải mã của công cụ không chấp nhận chữ cái Cơ số 32 viết thường và sẽ báo lỗi nếu gặp chúng. Cơ số 64 xem chữ hoa và chữ thường là các ký hiệu khác nhau, theo yêu cầu của định dạng, nên phải nhập đúng kiểu chữ như được hiển thị.

Một số chuỗi không thể nào được tạo ra bởi bộ mã hóa, và công cụ từ chối chúng thay vì đoán. RFC 4648 xây dựng Cơ số 64 theo các nhóm 4 ký tự và Cơ số 32 theo các nhóm 8 ký tự. Bỏ qua phần đệm =, một chuỗi Cơ số 64 dài hơn bội số của 4 đúng 1 ký tự, hoặc một chuỗi Cơ số 32 dài hơn bội số của 8 đúng 1, 3 hoặc 6 ký tự, sẽ không chứa đủ một byte hoàn chỉnh. Dữ liệu đầu vào như vậy gây ra lỗi thay vì cho ra một số.

Giới hạn phạm vi

Số lớn nhất công cụ chấp nhận là 9,007,199,254,740,991, bằng 2^53 − 1. Đây là số nguyên lớn nhất mà bộ máy JavaScript của trình duyệt web có thể biểu diễn chính xác. Vượt quá giới hạn đó, một số nguyên không còn được lưu trữ chính xác, nên công cụ báo lỗi thay vì âm thầm trả về một chữ số sai. Số 0 và mọi số nguyên không vượt quá giới hạn đó đều được chấp nhận; số không cần dương, chỉ cần không âm.

Giới hạn này áp dụng theo cả hai chiều. Một chuỗi đã mã hóa biểu thị một số lớn hơn, chẳng hạn giá trị Cơ số 16 20000000000000 (bằng 2^53), sẽ bị từ chối thay vì được làm tròn. Phân số cũng bị từ chối: các cách mã hóa biểu diễn những byte hoàn chỉnh, nên 1.5 gây ra lỗi thay vì cho kết quả đã làm tròn.

Mỗi cách mã hóa được sử dụng ở đâu

  • Cơ số 16 xuất hiện trong các giá trị màu CSS và HTML, địa chỉ MAC và IPv6, cũng như các giá trị băm dùng để kiểm tra tệp có bị thay đổi hay không.
  • Cơ số 32 xuất hiện trong khóa thiết lập xác thực hai yếu tố, một số hệ thống chia sẻ tệp và các mã định danh khác được thiết kế để đọc thành tiếng hoặc nhập thủ công.
  • Cơ số 64 xuất hiện trong URI data:, tệp đính kèm email và các token web như JWT, ở bất cứ nơi nào dữ liệu nhị phân cần truyền qua một hệ thống được xây dựng cho văn bản.

Việc chuyển đổi giữa các cách mã hóa này không bao giờ thay đổi số cơ bản. Nó chỉ thay đổi số lượng ký tự cần dùng để viết số đó và những hệ thống nào có thể truyền văn bản đó một cách an toàn.

Các câu hỏi thường gặp

Sự khác biệt giữa Cơ số 16, Cơ số 32 và Cơ số 64 là gì? Chúng khác nhau ở số lượng ký hiệu mà mỗi ký tự có thể biểu diễn: 16, 32 hoặc 64. Càng nhiều ký hiệu trên mỗi ký tự thì chuỗi đã mã hóa cho cùng một số càng ngắn, nhưng bảng chữ cái sử dụng cũng lớn hơn và khó đọc hơn.

Tại sao 1000 được mã hóa thành 03E8 thay vì 3E8 ở Cơ số 16? Đầu ra thập lục phân được đệm thành số nguyên byte, mỗi byte gồm hai chữ số thập lục phân. 1000 cần hai byte, nên kết quả luôn có bốn chữ số thập lục phân, dù chữ số đầu tiên là 0.

Cơ số 32 có phân biệt chữ hoa chữ thường không? Bảng chữ cái Cơ số 32 được định nghĩa bằng các chữ cái viết hoa. Bộ giải mã của công cụ chỉ chấp nhận dữ liệu đầu vào Cơ số 32 viết hoa; chữ thường sẽ gây ra lỗi.

Số lớn nhất mà bộ chuyển đổi có thể xử lý là bao nhiêu? 9,007,199,254,740,991, bằng 2^53 − 1. Đây là giới hạn độ chính xác của số nguyên trong JavaScript, ngôn ngữ mà công cụ sử dụng.

Có thể chuyển đổi một số âm không? Không. Công cụ chỉ chấp nhận các số nguyên không âm.

Tại sao công cụ từ chối một số chuỗi trông giống Base64 hợp lệ? Base64 được viết theo các nhóm 4 ký tự, nên một giá trị có độ dài hơn một bội số của 4 đúng 1 ký tự sẽ không mã hóa được một byte hoàn chỉnh. Không bộ mã hóa nào có thể tạo ra chuỗi đó, vì vậy công cụ báo lỗi thay vì trả về một số.

Việc chuyển đổi một số giữa các cơ số có làm thay đổi giá trị của số đó không? Không. Nó chỉ thay đổi dạng viết. 255, FF, 74====== và /w== đều biểu diễn cùng một số.