Skip to content

Konversi Hex ke Teks (dan Teks ke Hex)

Konversi hex ke teks dan teks ke hex. Tempel hex dalam bentuk apa pun — berspasi, 0x, \x, output xxd atau hexdump, array byte Java atau C — dan ASCII, UTF-8, GBK, atau UTF-16 terdeteksi otomatis. Berjalan di browser.

Tanpa Pelacakan Berjalan di Browser Gratis
Konversi berjalan sepenuhnya di browser Anda — apa pun yang Anda tempel tidak meninggalkan perangkat ini.
Coba contoh

Dibaca sebagai hex polos · 13 byte

    Teks
    Hello, 世界

    Terdeteksi otomatis sebagai UTF-8: setiap urutan multi-byte valid.

    Byte yang sama di setiap encoding

    Encoding Terbaca sebagai
    UTF-8 Ter-decode dengan bersih Hello, 世界
    GBK / GB18030 Ter-decode dengan bersih Hello, 涓栫晫
    UTF-16LE Ada byte yang tak bisa di-decode 效汬Ɐ隸闧�
    UTF-16BE Ada byte yang tak bisa di-decode 䡥汬漬⃤뢖�
    ISO-8859-1 Ter-decode dengan bersih Hello, ä¸<96>ç<95><8C>
    Hex dump, array byte, dan pesan error yang dikutip di sini direkam dari eksekusi nyata xxd, Python 3.14, Node.js 26, Go 1.27, dan clang, dan format output engine diuji agar bisa dibaca kembali menjadi byte aslinya. Perilaku Java dan PHP dikutip dari dokumentasi resmi. — Tim Rekayasa Go Tools · Sep 16, 2026

    Ditulis dan ditinjau oleh developer yang membangun utilitas encoding Go Tools. Setiap nilai hex dan output yang dikutip di halaman ini dihasilkan oleh engine halaman ini sendiri dan diperiksa oleh pengujian otomatis.

    Jawaban singkat hex ke ASCII

    Apa teks dari 48 65 6C 6C 6F?

    Hello 48 adalah H, 65 adalah e, 6C adalah l, dan 6F adalah o di ASCII dan UTF-8.

    Berapa byte satu karakter Mandarin?

    Biasanya 3 byte di UTF-8, 2 di GBK 你 adalah E4 BD A0 di UTF-8 dan C4 E3 di GBK.

    Apa itu 0D 0A?

    CR LF (\r\n) Carriage return diikuti line feed — akhir baris yang dipakai Windows, HTTP, dan sebagian besar set perintah serial.

    Apa huruf A dalam hex?

    41 Huruf kecil a adalah 61; huruf besar dan huruf kecil selalu berselisih 20.

    Apa itu konversi hex ke teks?

    Heksadesimal (hex) adalah cara menuliskan byte: setiap byte, dari 0 sampai 255, ditulis sebagai dua digit dari 00 sampai FF. Konversi hex ke teks mengubah byte-byte itu kembali menjadi teks yang bisa dibaca, dan selalu melibatkan pilihan character encoding — tabel yang menentukan byte, atau urutan byte, mana yang mewakili karakter mana.

    Untuk teks bahasa Inggris, pilihan itu jarang terasa, karena ASCII, UTF-8, GBK, dan sebagian besar encoding lain sepakat soal byte 00 sampai 7F. Untuk teks lainnya, perbedaannya langsung terlihat. Byte C4 E3 BA C3 adalah 你好 dalam GBK dan tidak valid dalam UTF-8, sedangkan 你好 dalam UTF-8 adalah E4 BD A0 E5 A5 BD. Hex hanyalah separuh informasi; separuh lainnya adalah encoding.

    String ke hex adalah kebalikannya: encode teks menjadi byte, lalu tulis setiap byte sebagai dua digit hex. Developer memakainya untuk melihat persis apa yang lewat di jalur serial atau masuk ke kolom database, untuk memasukkan data biner ke dalam source code, dan untuk membandingkan apa yang sebenarnya dikirim oleh dua sistem.

    $ echo 48656c6c6f | xxd -r -p
    Hello
    
    >>> bytes.fromhex('c4e3bac3').decode('gbk')
    '你好'
    >>> bytes.fromhex('c4e3bac3').decode('utf-8')
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc4 in position 0: invalid continuation byte

    Apa yang dilakukan konverter hex ini

    Tempel hex dalam bentuk apa pun

    Berspasi, rapat, dipisah titik dua atau tanda hubung, nilai 0x, escape \x, encoding %, array C, Go, dan Java, output Arrays.toString Java yang bertanda (signed), literal bytes Python, Buffer Node.js, serta layar penuh xxd, hexdump -C, dan od. Halaman ini memberi tahu apa yang dikenali dan apa yang dibuang.

    Encoding terdeteksi, lengkap dengan alasannya

    Deteksi otomatis memeriksa byte-order mark, UTF-8 yang valid, UTF-16, ASCII murni, lalu GBK, dan menyebutkan aturan mana yang menentukan. GBK hanya dipilih jika byte-nya terbaca sebagai karakter Mandarin yang umum, sehingga frame biner pendek dilaporkan sebagai kemungkinan besar bukan teks, bukan sebagai karakter Mandarin tanpa makna.

    Semua encoding berdampingan

    Byte yang sama ditampilkan sebagai UTF-8, GBK, UTF-16LE, UTF-16BE, dan ISO-8859-1, masing-masing ditandai apakah ter-decode dengan bersih atau tidak. Ketika teks keluar kacau, hasil baca yang benar biasanya ada satu baris di bawahnya.

    Byte tak terlihat jadi terlihat

    NUL, CR, LF, ESC, dan byte kontrol lainnya ditampilkan sebagai ␀ ␍ ␊ ␛, sehingga 00 di akhir atau 0D yang hilang dalam data protokol langsung menonjol. Menyalin tetap menghasilkan karakter aslinya.

    Output siap ditempel ke kode

    Teks → Hex menghasilkan hex berspasi atau rapat, daftar 0x, escape \x, array C gaya xxd -i, byte[] Java dengan nilai bertanda, literal bytes Python yang sesuai dengan repr(), []byte Go, atau dump xxd — dan halaman ini bisa membaca kembali semuanya.

    Tidak ada yang meninggalkan browser Anda

    Parsing dan decoding berjalan secara lokal dengan JavaScript. Tidak ada yang diunggah, disimpan, atau dimasukkan ke URL, jadi packet capture dan log produksi aman untuk ditempel.

    Hex ke string dalam kode

    Python 3

    bytes.fromhex(h).decode()

    bytes.fromhex('48 65 6c 6c 6f').decode('utf-8') mengembalikan 'Hello'; spasi di antara byte diperbolehkan, prefiks 0x tidak. Kebalikannya adalah s.encode('utf-8').hex(), atau .hex(' ') untuk output berspasi. Berikan 'gbk' untuk men-decode atau meng-encode teks Mandarin dalam GBK.

    JavaScript (Node.js)

    Buffer.from(h, 'hex')

    Buffer.from(h, 'hex').toString('utf8') men-decode, Buffer.from(s, 'utf8').toString('hex') meng-encode. Input tidak valid tidak dianggap error: decoding berhenti di pasangan buruk pertama dan digit ganjil di akhir dibuang, jadi validasi dulu.

    JavaScript (browser)

    TextDecoder / TextEncoder

    Ubah setiap pasangan dengan parseInt(pair, 16) ke dalam Uint8Array, lalu new TextDecoder('utf-8').decode(bytes). TextDecoder juga bisa membaca 'gbk', 'big5', dan 'shift_jis', tetapi TextEncoder hanya menghasilkan UTF-8.

    Java 17+

    HexFormat.of()

    new String(HexFormat.of().parseHex(h), StandardCharsets.UTF_8) men-decode dan HexFormat.of().formatHex(s.getBytes(StandardCharsets.UTF_8)) meng-encode. Di versi lama, format setiap byte dengan String.format("%02x", b); hindari Integer.toHexString(b), yang mencetak ffffffe4 untuk byte negatif.

    Go

    encoding/hex

    hex.DecodeString(h) mengembalikan byte-nya dan string(b) menjadikannya string; hex.EncodeToString([]byte(s)) melakukan kebalikannya. Paket ini ketat: spasi menghasilkan invalid byte: U+0020 ' ' dan panjang ganjil menghasilkan odd length hex string.

    C

    sscanf with %2hhx

    Telusuri string dua digit sekaligus ke dalam buffer unsigned char dan tambahkan '\0' sebagai penutup. Untuk mencetak hex, cast ke unsigned char dan pakai %02X; jika tidak, byte di atas 0x7F bisa tercetak sebagai FFFFFFE4 di platform yang char-nya bertanda.

    PHP

    hex2bin() / bin2hex()

    hex2bin('48656c6c6f') mengembalikan Hello dan bin2hex('Hello') mengembalikan 48656c6c6f. Manual PHP mendokumentasikan bahwa hex2bin() mengembalikan false disertai E_WARNING untuk input yang panjangnya ganjil atau tidak valid.

    Shell (xxd)

    xxd -r -p / xxd -p

    echo 48656c6c6f | xxd -r -p mencetak Hello, dan printf 'Hello' | xxd -p mencetak 48656c6c6f. Gunakan printf alih-alih echo saat meng-encode, karena echo menambahkan newline di akhir, 0a.

    C# (.NET 5+)

    Convert.FromHexString()

    Encoding.UTF8.GetString(Convert.FromHexString(h)) men-decode dan Convert.ToHexString(Encoding.UTF8.GetBytes(s)) meng-encode (huruf besar, tanpa pemisah). FromHexString menolak spasi dan prefiks 0x. .NET Core dan .NET 5+ tidak menyertakan GBK: panggil dulu Encoding.RegisterProvider(CodePagesEncodingProvider.Instance), lalu Encoding.GetEncoding(936).

    Contoh konversi hex ke teks

    Hex UTF-8 berisi karakter Mandarin

    48 65 6C 6C 6F 2C 20 E4 B8 96 E7 95 8C
    Hello, 世界

    Tujuh byte pertama adalah ASCII biasa: 48 65 6C 6C 6F adalah Hello, 2C koma, dan 20 spasi. E4 B8 96 dan E7 95 8C adalah urutan UTF-8 tiga byte untuk 世 dan 界 — sebagian besar karakter Mandarin memakan tiga byte di UTF-8. Karena setiap urutannya valid, deteksi otomatis membacanya sebagai UTF-8.

    Data sensor GBK yang bukan UTF-8 valid

    CE C2 B6 C8 3A 32 35 2E 33 A1 E6
    温度:25.3℃

    Banyak perangkat serial mengirim teks Mandarin dalam GBK. Di sini CE C2 adalah 温 dan B6 C8 adalah 度, 3A 32 35 2E 33 adalah ASCII :25.3, dan A1 E6 adalah tanda ℃ lebar penuh — dua byte per karakter Mandarin atau simbol. Dibaca sebagai UTF-8, byte-byte ini tidak valid (CE membuka urutan dua byte, tetapi C2 bukan byte lanjutan), sedangkan dibaca sebagai GBK hasilnya karakter umum, jadi deteksi otomatis memilih GBK. Konverter yang hanya mengenal UTF-8 akan menampilkan karakter pengganti di sini.

    Output xxd ditempel apa adanya

    00000000: 4869 20e4 bda0 e5a5 bd0d 0a              Hi ........
    Hi 你好␍␊

    Ini persis yang dicetak printf 'Hi 你好\r\n' | xxd. Offset 00000000: dan kolom karakter di sebelah kanan dibuang sebelum decoding; kalau ikut dibaca sebagai data, delapan angka nol itu saja sudah menjadi empat byte NUL di awal. Dua byte terakhir, 0d 0a, adalah jeda baris Windows, ditampilkan sebagai ␍␊.

    Array byte Java dari log

    [-28, -72, -83, -26, -106, -121]
    中文

    Arrays.toString(bytes) mencetak byte bertanda (signed) Java dalam desimal. Nilai negatif adalah byte 0x80 ke atas: -28 adalah 256 − 28 = 228 = 0xE4. Enam byte E4 B8 AD E6 96 87 adalah encoding UTF-8 dari 中文.

    Teks ke hex untuk perintah AT serial

    AT+CSQ\r\n
    41 54 2B 43 53 51 0D 0A

    Modem dan sebagian besar set perintah UART mengharapkan setiap perintah diakhiri carriage return plus line feed. Kotak teks hanya menghasilkan 0A saat Anda menekan Enter, jadi centang Jeda baris sebagai CR LF dan akhir barisnya menjadi 0D 0A.

    Hex yang di-hex-encode dua kali

    653462646130653561356264
    e4bda0e5a5bd → 你好

    Setiap byte di sini adalah digit hex dalam ASCII (65 adalah e, 34 adalah 4, 62 adalah b), sehingga decode pertama menghasilkan string hex lain. Ini terjadi ketika string hex diperlakukan sebagai teks lalu dikonversi lagi. Halaman ini menawarkan putaran kedua, yang menghasilkan 你好. Untuk menghindari alarm palsu, tawaran itu hanya muncul jika hasil pertama berisi setidaknya 12 digit hex dan hasil kedua ter-decode menjadi teks sungguhan — tanggal, timestamp, nilai CRC32, dan hash MD5 tidak memicunya.

    Cara konversi hex ke teks

    1. 1

      Tempel hex-nya

      Tempel ke kotak di tab Hex → Teks dalam bentuk apa pun yang Anda punya: berspasi, rapat, nilai 0x, escape \x, array byte, atau satu layar penuh xxd. Baris di bawah kotak menyebutkan input dibaca sebagai apa.

    2. 2

      Periksa teks dan encoding-nya

      Teksnya muncul di sebelah kanan, beserta encoding hasil deteksi otomatis dan alasannya. Jika tebakannya salah, tabel di bawahnya menampilkan semua hasil baca; pilih yang benar dari menu Encoding.

    3. 3

      Cari karakter tak terlihat

      Byte kontrol seperti NUL, CR, dan LF ditampilkan sebagai ␀ ␍ ␊. Hapus centang Tampilkan karakter tak terlihat untuk melihat teks polosnya, lalu salin hasilnya.

    4. 4

      Atau konversi teks ke hex

      Di tab Teks → Hex, pilih encoding dan format output — hex berspasi, nilai 0x, array C, Java, Python, atau Go, atau dump xxd. Centang CR LF untuk protokol serial dan jaringan.

    Kenapa konversi hex ke teks bisa salah

    Men-decode byte GBK sebagai UTF-8

    Teks Mandarin dari perangkat lunak Windows lama, banyak perangkat serial, dan database lawas memakai GBK. Men-decode-nya sebagai UTF-8 akan gagal atau memenuhi output dengan karakter pengganti. Lihat tabel encoding dan pakai hasil baca yang masuk akal.

    ✗ Salah
    >>> bytes.fromhex('c4e3bac3').decode('utf-8')
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc4 in position 0: invalid continuation byte
    ✓ Benar
    >>> bytes.fromhex('c4e3bac3').decode('gbk')
    '你好'

    Memakai charCodeAt() untuk mengambil byte di JavaScript

    charCodeAt() mengembalikan code unit UTF-16. Untuk ASCII nilainya kebetulan sama dengan byte-nya, jadi bug ini baru muncul pada karakter lain, ketika hasilnya bukan apa yang dikirim sistem UTF-8 mana pun.

    ✗ Salah
    '你'.charCodeAt(0).toString(16)   // '4f60' — a UTF-16 code unit
    ✓ Benar
    Buffer.from('你', 'utf8').toString('hex')   // 'e4bda0' — the UTF-8 bytes

    Memformat byte bertanda dengan Integer.toHexString di Java

    byte di Java bertanda (signed), jadi byte mulai 0x80 ke atas bernilai negatif. Integer.toHexString() bekerja pada int, mencetak nilai negatif sebagai hex unsigned 32-bit, dan membuang nol di depan.

    ✗ Salah
    Integer.toHexString(b)        // "ffffffe4" for 0xE4, "a" for 0x0A
    ✓ Benar
    String.format("%02x", b)      // "e4", "0a"

    Memercayai Buffer.from() Node.js dengan hex yang belum dicek

    Buffer.from(hex, 'hex') tidak pernah melempar error. Ia berhenti di pasangan pertama yang bukan hex valid dan mengabaikan digit ganjil di akhir, sehingga salah ketik menghasilkan buffer yang lebih pendek alih-alih error.

    ✗ Salah
    Buffer.from('486', 'hex')      // <Buffer 48> — the 6 is silently dropped
    Buffer.from('48zz65', 'hex')   // <Buffer 48> — stops at zz
    ✓ Benar
    if (!/^([0-9a-f]{2})*$/i.test(hex)) throw new Error('invalid hex');
    Buffer.from(hex, 'hex');

    Menempel hex dump beserta kolom offset-nya

    Konverter yang hanya membuang spasi membaca offset 00000000: sebagai data dan kolom karakter sebagai hex tambahan jika memungkinkan. Hasilnya diawali byte NUL lalu makin melenceng. Gunakan xxd -p untuk hex polos, atau tempel dump-nya di sini, tempat kolom-kolomnya dikenali.

    ✗ Salah
    00000000: 4869 20e4 bda0 e5a5 bd0d 0a              Hi ........
    → read naively: 00 00 00 00 48 69 20 e4 …
    ✓ Benar
    $ printf 'Hi 你好\r\n' | xxd -p
    486920e4bda0e5a5bd0d0a

    Mengirim LF ketika perangkat mengharapkan CR LF

    Modem AT dan banyak protokol berbasis baris mengakhiri setiap perintah dengan carriage return plus line feed. Perintah yang hanya diakhiri 0A sering diabaikan tanpa error sama sekali.

    ✗ Salah
    41 54 2B 43 53 51 0A      AT+CSQ followed by LF only
    ✓ Benar
    41 54 2B 43 53 51 0D 0A   AT+CSQ followed by CR LF

    Kapan Anda butuh konverter hex ke teks

    Debugging serial dan UART
    Terminal serial menampilkan data yang diterima sebagai hex. Tempel sebuah frame untuk membaca teks di dalamnya dan menemukan 0D 0A atau 00 di ujungnya — atau lakukan ke arah sebaliknya untuk menyusun perintah berakhiran CR LF yang akan diterima perangkat.
    Membaca packet capture
    Payload protokol yang disalin dari Wireshark atau tcpdump berbentuk hex. Men-decode request line, body JSON, atau nama perangkat di dalam frame lebih cepat di sini daripada menulis skrip, dan tidak ada yang meninggalkan mesin Anda.
    Array byte di log aplikasi
    Java mencatat array byte sebagai desimal bertanda, Python sebagai literal b'...', dan Node.js sebagai <Buffer ...>. Tempel potongan log apa adanya untuk melihat teksnya, termasuk apakah aslinya UTF-8 atau GBK.
    Kolom hex dan BLOB di database
    Tool database menampilkan kolom biner sebagai hex. Decode sebuah nilai untuk memeriksa apa yang sebenarnya tersimpan, atau konversi teks ke hex untuk membandingkannya byte demi byte dengan isi database.
    String di firmware dan source C
    Kode embedded menyimpan teks dalam array byte. Ubah string menjadi array C yang siap ditempel, atau baca kembali array dari file header sebagai teks untuk memastikan apa yang akan dicetak perangkat.

    Bagaimana hex menjadi teks: ASCII, UTF-8, GBK, dan UTF-16

    Dua digit hex per byte
    Satu byte berisi 8 bit dan satu digit hex berisi 4, jadi setiap byte tepat dua digit hex, 00 sampai FF, dan jumlah byte selalu setengah dari jumlah digit. Huruf besar dan huruf kecil artinya sama. Pemisah, prefiks, dan sintaks array hanyalah notasi: 4865, 48 65, 0x48, 0x65, dan \x48\x65 adalah dua byte yang sama.
    ASCII: byte yang disepakati semua encoding
    ASCII menetapkan 00 sampai 7F. Karakter yang bisa dicetak berada dari 20 (spasi) sampai 7E (~); sisanya karakter kontrol, dan yang paling sering muncul di data nyata adalah 00 (NUL), 09 (tab), 0A (line feed), 0D (carriage return), dan 1B (escape). UTF-8, GBK, dan ISO-8859-1 semuanya mempertahankan nilai-nilai ini, itulah sebabnya teks bahasa Inggris biasa tetap utuh di hampir semua encoding yang salah.
    UTF-8: satu sampai empat byte per karakter
    UTF-8 menulis ASCII sebagai byte tunggal dan setiap karakter lain sebagai urutan byte. Byte pertama menandakan panjangnya — C2DF untuk dua byte, E0EF untuk tiga, F0F4 untuk empat — dan setiap byte berikutnya harus berada di 80BF. Struktur yang ketat inilah yang membuat kalimat GBK hampir tidak pernah menjadi UTF-8 yang valid — dalam uji kami terhadap 33.910 kalimat Mandarin, hanya 55 yang valid — dan menjadi alasan deteksi otomatis memercayai decode UTF-8 yang bersih. Satu karakter Mandarin tunggal lain ceritanya: sekitar 18% karakter GBK kebetulan membentuk urutan UTF-8 dua byte yang valid.
    GBK: dua byte per karakter Mandarin
    GBK mempertahankan ASCII sebagai byte tunggal dan meng-encode karakter Mandarin serta tanda baca lebar penuh dengan dua byte: lead byte dari 81 sampai FE diikuti trail byte dari 40 sampai FE, kecuali 7F. Karena rentang trail byte begitu lebar, teks UTF-8 pendek yang dibaca sebagai GBK sering ter-decode tanpa error sama sekali menjadi karakter yang tidak berhubungan — E4 BD A0 E5 A5 BD (你好) menjadi 浣犲ソ — itulah sebabnya halaman ini mencoba UTF-8 lebih dulu. GB18030 memperluas GBK dengan urutan empat byte untuk karakter yang lebih langka; decoding di halaman ini menerimanya.
    UTF-16 dan urutan byte
    UTF-16 memakai dua byte per karakter (empat untuk karakter di luar Basic Multilingual Plane), dan kedua byte itu bisa datang dalam urutan mana pun. UTF-16LE menaruh byte rendah lebih dulu — A adalah 41 00 — dan UTF-16BE menaruh byte tinggi lebih dulu — 00 41. API Windows dan banyak file memakai little-endian dan bisa diawali byte-order mark, FF FE; file UTF-8 kadang diawali EF BB BF. Deteksi otomatis membuang byte-order mark dan melaporkannya.

    Konversi hex ke string dan sebaliknya secara andal

    Sebutkan encoding-nya di kedua sisi
    Hex saja tidak memberi tahu encoding apa yang menghasilkannya. Di mana pun teks diubah menjadi byte — getBytes(), encode(), setelan terminal serial, charset koneksi database — setel encoding secara eksplisit dan catat di samping hex-nya, supaya pihak lain tidak perlu menebak.
    Bekerja dengan byte, bukan kode karakter
    Fungsi yang mengembalikan kode karakter, seperti charCodeAt() di JavaScript atau nilai char di Java, memberikan code unit UTF-16, bukan byte hasil encoding. Encode string-nya dulu dengan TextEncoder, Buffer.from(), atau getBytes(StandardCharsets.UTF_8), baru format byte-nya.
    Selalu padding setiap byte menjadi dua digit
    Gunakan %02x atau padanannya, jangan pernah memakai konversi angka-ke-hex polos. a dan 0a terlihat mirip di log, tetapi menyambung nilai tanpa padding menghasilkan string berpanjang ganjil, atau lebih buruk lagi, string yang ter-decode menjadi byte yang berbeda.
    Pakai pemisah yang konsisten dalam satu log
    Pilih satu format untuk log dan trace, misalnya pasangan dipisah spasi, dan tetap pakai format itu. Format campuran mudah dibaca manusia tetapi mudah salah dibaca skrip, terutama jika sebagian nilai diberi padding dan sebagian tidak.
    Periksa jumlah byte
    Sebelum memercayai hasil konversi, bandingkan jumlah byte dengan yang Anda harapkan: field panjang di header protokol, ukuran kolom, atau ukuran file. Halaman ini menampilkan jumlahnya untuk kedua arah.

    FAQ konversi hex ke teks

    Bagaimana cara konversi hex ke teks?
    Tempel hex ke kotak di tab Hex → Teks; teksnya langsung muncul. Secara manual ada dua langkah. Pertama, pecah hex menjadi pasangan: setiap pasang digit hex adalah satu byte, dari 00 sampai FF, jadi 48656c6c6f adalah lima byte 48, 65, 6C, 6C, 6F. Kedua, decode byte-byte itu dengan sebuah character encoding. Di ASCII dan UTF-8, 48 adalah H, 65 adalah e, 6C adalah l, dan 6F adalah o, sehingga hasilnya Hello. Di langkah kedua inilah hasil bisa berbeda: byte di atas 7F berarti karakter yang berbeda di UTF-8, GBK, dan encoding lain, itulah sebabnya halaman ini mendeteksi encoding dan menampilkan semua hasil baca secara berdampingan.
    Kenapa hex saya berubah menjadi karakter acak?
    Hampir selalu karena byte-nya di-decode dengan encoding yang salah. Teks Mandarin adalah contoh klasiknya: C4 E3 BA C3 adalah 你好 dalam GBK tetapi bukan UTF-8 yang valid, sedangkan E4 BD A0 E5 A5 BD adalah 你好 dalam UTF-8 tetapi berubah menjadi 浣犲ソ saat dibaca sebagai GBK. Lihat tabel encoding di bawah hasil — baris yang terbaca sebagai teks yang masuk akal adalah encoding yang dipakai saat data ditulis. Dengan hanya satu atau dua karakter, deteksi otomatis tidak selalu bisa memastikan: D2 BB adalah UTF-8 yang valid (һ) sekaligus GBK (一), jadi periksa baris GBK yang ditampilkan halaman ini di bawah hasil. Dua penyebab lain juga perlu disingkirkan: digit hex yang berlebih atau hilang, yang menggeser setiap byte sesudahnya sebesar setengah byte, dan hex dump yang ditempel lengkap dengan kolom offset-nya. Jika yang Anda punya sudah berupa teks acak (seperti 浣犲ソ), bukan hex, tempel teks tersebut ke konverter encoding.
    Kenapa data serial tampak acak sebagai teks tetapi benar dalam hex?
    Kalau hex-nya benar, baud rate, bit data, dan paritas sudah tepat — jika salah setel, byte-nya sendiri yang akan berubah. Masalahnya ada di langkah yang mengubah byte menjadi karakter, dan biasanya penyebabnya salah satu dari tiga hal. Datanya mungkin memang bukan teks: protokol biner seperti Modbus RTU hanya bermakna jika dibaca sebagai hex. Encoding-nya mungkin tidak cocok: perangkat mengirim teks Mandarin sebagai UTF-8 sementara terminal serial menampilkannya sebagai GBK, atau sebaliknya, sehingga byte UTF-8 E4 BD A0 E5 A5 BD untuk 你好 muncul sebagai 浣犲ソ. Atau teksnya mengandung byte kontrol seperti 00 atau 0D 0A yang muncul sebagai simbol kotak atau baris baru. Tempel hex-nya di sini: tabel encoding menampilkan pembacaan UTF-8 dan GBK berdampingan, dan byte kontrol ditampilkan sebagai ␀ ␍ ␊.
    Apa bedanya hex ke ASCII dan hex ke UTF-8?
    ASCII hanya mendefinisikan byte 00 sampai 7F: huruf, angka, tanda baca, dan karakter kontrol. UTF-8 dirancang agar byte-byte yang sama itu berarti karakter yang persis sama, dan memakai urutan byte mulai 80 ke atas untuk semua karakter lainnya — 2 byte untuk huruf Latin beraksen, 3 untuk sebagian besar karakter Mandarin, Jepang, dan Korea, 4 untuk emoji. Jadi untuk teks bahasa Inggris biasa, hex ke ASCII dan hex ke UTF-8 memberikan hasil yang identik. Keduanya baru berbeda begitu ada byte bernilai 80 atau lebih: konverter yang hanya mengenal ASCII tidak bisa menampilkan byte tersebut sebagai karakter, sedangkan UTF-8 men-decode-nya ke seluruh rentang Unicode. Untuk arti setiap byte dari 00 sampai 7F, lihat tabel ASCII.
    Berapa byte satu karakter Mandarin dalam hex?
    Tergantung encoding-nya. Di UTF-8 sebagian besar karakter Mandarin memakan 3 byte: 你 adalah E4 BD A0. Di GBK dan GB2312 memakan 2 byte: 你 adalah C4 E3. Di UTF-16, karakter dalam Basic Multilingual Plane memakan 2 byte, dan urutan byte-nya berpengaruh: 你 adalah 60 4F di UTF-16LE dan 4F 60 di UTF-16BE. Karakter langka di luar plane tersebut memakan 4 byte di UTF-8, 4 di UTF-16 (surrogate pair), dan 4 di GB18030. Ganti encoding di tab Teks → Hex untuk melihat jumlah byte teks Anda sendiri.
    Bagaimana cara konversi hex ke string di Python?
    Gunakan bytes.fromhex() lalu decode: bytes.fromhex('48656c6c6f').decode('utf-8') mengembalikan 'Hello'. fromhex menerima spasi di antara byte, jadi bytes.fromhex('48 65 6c 6c 6f') juga berfungsi, tetapi menolak prefiks 0x dengan ValueError. Untuk data GBK, decode dengan 'gbk': bytes.fromhex('c4e3bac3').decode('gbk') mengembalikan '你好', sedangkan men-decode byte yang sama sebagai UTF-8 memunculkan UnicodeDecodeError. Kebalikannya adalah '你好'.encode('utf-8').hex(), yang mengembalikan 'e4bda0e5a5bd'; berikan pemisah seperti .hex(' ') untuk mendapatkan output yang dipisah spasi.
    Bagaimana cara konversi hex ke string di JavaScript?
    Di Node.js, Buffer.from('48656c6c6f', 'hex').toString('utf8') mengembalikan 'Hello'. Hati-hati dengan input yang rusak: Node tidak melempar error — ia berhenti di pasangan tidak valid pertama dan diam-diam membuang digit ganjil di akhir, jadi Buffer.from('486', 'hex') adalah buffer satu byte. Di browser, susun byte-nya sendiri lalu pakai TextDecoder, yang juga bisa membaca GBK: new TextDecoder('gbk').decode(Uint8Array.from('c4e3bac3'.match(/../g), h => parseInt(h, 16))) mengembalikan '你好'. Jangan pakai charCodeAt() untuk mengambil byte: '你'.charCodeAt(0).toString(16) adalah '4f60', sebuah code unit UTF-16, bukan byte UTF-8 e4bda0.
    Bagaimana cara konversi string hex ke string di C atau C++?
    Baca dua digit hex sekaligus ke dalam buffer unsigned char, lalu tutup dengan terminator: for (size_t i = 0; i < n; i++) sscanf(hex + 2 * i, "%2hhx", &buf[i]); buf[n] = '\0'; dengan n bernilai strlen(hex) / 2. Jika hex berisi 48656c6c6f2c20e4b896e7958c, mencetak buf di terminal UTF-8 menghasilkan Hello, 世界. Untuk arah sebaliknya, cetak setiap byte dengan printf("%02X ", (unsigned char)s[i]). Cast-nya penting: di platform yang char-nya bertanda (signed), byte seperti 0xE4 akan mengalami sign extension dan tercetak sebagai FFFFFFE4. Di C++, tambahkan setiap pasangan dengan s.push_back(static_cast<char>(std::stoi(hex.substr(i, 2), nullptr, 16))); hex yang sama menghasilkan Hello, 世界.
    Bagaimana cara konversi hex ke string di Java, dan kenapa Java mencetak ffffffe4?
    Di Java 17 ke atas cukup satu baris: new String(HexFormat.of().parseHex(hex), StandardCharsets.UTF_8); untuk data GBK, pakai Charset.forName("GBK") sebagai gantinya. Untuk arah sebaliknya, kejutan klasiknya adalah ffffffe4. Ini terjadi karena byte di Java bertanda (signed) dan Integer.toHexString() menerima int. Byte 0xE4 disimpan sebagai -28; memperlebarnya menjadi int tetap mempertahankan nilai -28, dan toHexString mencetak bilangan negatif sebagai nilai unsigned 32-bit, ffffffe4. Metode yang sama juga membuang nol di depan, jadi 0x0A keluar sebagai a. Gunakan String.format("%02x", b), yang memformat byte negatif sebagai nilai unsigned 8-bit-nya, atau Integer.toHexString(b & 0xff) dengan padding. Di Java 17 ke atas, HexFormat.of().formatHex(bytes) mengonversi seluruh array, dan HexFormat.of().parseHex(hex) melakukan kebalikannya.
    Fungsi PHP apa yang mengonversi hex ke string?
    hex2bin() men-decode string hex menjadi string biner, dan bin2hex() melakukan kebalikannya: bin2hex('Hello') mengembalikan 48656c6c6f. Menurut manual PHP, hex2bin() mengembalikan false dan memunculkan E_WARNING jika panjang input ganjil atau bukan heksadesimal yang valid, jadi buang spasi dan prefiks 0x sebelum memanggilnya. String PHP adalah byte, jadi hasilnya memakai encoding apa pun yang dipakai teks aslinya — konversikan output GBK dengan mb_convert_encoding() jika halaman Anda memakai UTF-8.
    Bisakah saya menempel output xxd atau hexdump secara langsung?
    Bisa. Kolom offset dan kolom karakter dikenali lalu dibuang, dan baris di bawah kotak input memberi tahu bahwa hal itu terjadi. Ini penting karena konverter yang hanya membuang spasi akan membaca offset sebagai data. Halaman ini menangani xxd (termasuk -u, -c, dan -g), hexdump -C, hex.Dump milik Go, od -A x -t x1, dan GNU od -t x1z, serta menjabarkan baris * yang dicetak hexdump dan od sebagai pengganti baris yang berulang. Halaman ini juga menangani hexdump polos dan od -x, yang mencetak word 16-bit alih-alih byte: di mesin little-endian, byte 48 69 dicetak sebagai 6948, jadi halaman ini menukar kembali setiap pasangan dan memakai offset terakhir untuk membuang byte padding yang ditambahkan pada data berpanjang ganjil. Setiap varian xxd, hexdump, dan od diuji terhadap 600 dump nyata dari data acak.
    Apa artinya jika jumlah digit hex ganjil?
    Ada yang hilang atau bertambah, karena setiap byte tepat dua digit hex. Penyebab umumnya adalah nol di depan yang dibuang oleh fungsi angka-ke-hex (a alih-alih 0a), karakter yang terpotong saat menyalin, atau huruf nyasar seperti O di tempat 0. String hex yang dihasilkan dengan mengonversi semua byte sebagai satu angka besar, seperti hex(int.from_bytes(data, 'big')) di Python, kehilangan nol di awal: \r\n keluar sebagai 0xd0a. Halaman ini tidak menebak digit mana yang hilang, karena tebakan yang salah menggeser setiap byte sesudahnya sebesar setengah byte dan menghasilkan omong kosong yang tampak meyakinkan. Sebagai gantinya, halaman ini menawarkan dua perbaikan sekali klik — tambahkan 0 di awal, atau hapus digit terakhir — sehingga Anda bisa membandingkan hasilnya. Nilai yang ditulis satu per satu dengan prefiks, seperti 0x0 0xa, tidak bermasalah: masing-masing dibaca sebagai satu byte utuh.
    Apakah data yang saya tempel diunggah ke suatu tempat?
    Tidak. Konversi berjalan dengan JavaScript di browser Anda: tidak ada yang dikirim ke server, disimpan, atau ditambahkan ke URL halaman. Anda bisa memastikannya di panel Network pada developer tools browser. Ini penting di sini, karena hex yang ditempel ke konverter sering kali berupa packet capture, dump firmware, atau baris dari log produksi.