Metinden on altılığa dönüştürücü

Metni on altılığa dönüştürün — UTF-8 veya UTF-16 baytları, boşluklu, dizi, kaçışlı ya da döküm olarak — ve bu biçimlerin her birini metin olarak geri okuyun.

Girdi
Çıktı
4D 65 72 68 61 62 61

Saklandığı baytlar olarak bir dize

Bir programın işlediği her dize, altta art arda dizilmiş baytlardır; bu sayfa onları her biri iki rakamla on altılık olarak yazar. Hello yazın, 48 65 6C 6C 6F elde edersiniz: harf başına bir bayt ve sonuncusu dışında her birinin ardından bir boşluk. Bunun yerine yönü “On altılıktan metne” olarak ayarlayıp bir günlükten, bir veritabanından ya da bir hata ayıklayıcıdan alınmış on altılık rakamlar yapıştırırsanız, o baytların tuttuğu metni geri alırsınız.

Aynı metin farklı kodlamalarda farklı baytlar verir ve bu sayfadaki rakamların ne olduğunu birim belirler. Birim UTF-8 ile başlar; web’in kodlaması olan UTF-8’de H harfi 48 baytıdır, א harfi ise D7 90 baytlarıdır. UTF-16 LE ve UTF-16 BE her birine, zıt sıralarla, iki bayt harcar — H için 48 00 ya da 00 48 — “Kod noktaları” ise baytları tümden bir yana bırakır ve Unicode’un atadığı numarayı yazar: א için U+05D0. Hangi birim ayarlıysa, yazdığınız metin için olduğu kadar okuduğunuz on altılık rakamlar için de geçerlidir ve ayarlı kalır: yapıştırılan on altılık rakamlar başka bir birimin baytlarına benzerse sayfa o birimi önerebilir, ama onu yalnızca sizin tıklamanız değiştirir.

Her bayta iki on altılık rakam

Bir bayt 256 değerden birini tutar: 0’dan 255’e kadar. On altılık sayı sistemi on altışar sayar; 0’dan 9’a kadar rakamları, ardından on ile on beş için A’dan F’ye kadar harfleri kullanır ve on altı kere on altı 256 eder; bu yüzden iki on altılık rakam her baytı adlandırır ve üçüncüsüne asla gerek kalmaz: 00, 0’dır; 7F, 127’dir; FF ise 255’tir. H, 72’dir, yani dört kere on altı artı sekiz; bu yüzden baytı 48 olur.

Her on altılık rakam tam dört biti, yani yarım baytı temsil eder: 48 baytındaki 4, 0100 olur; 8 ise 1000 olur ve yan yana H’nin sekiz bitini verirler: 01001000. Sayfa her baytın iki rakamını da korur; bu yüzden bir satır beslemesi 0A, bir boşluk ise 20 olur ve her bayt aynı genişliği kapladığı için on altılık rakamlar, baytlar arasında hiçbir şey olmadan geri okunabilir: 4869, Hi olur.

On altılıktaki harfler büyük de yazılsa küçük de yazılsa aynı anlama gelir. Siz “küçük harf” seçeneğini seçmedikçe sayfa büyük harf yazar; bu yüzden é, C3 A9 ya da c3 a9 olur ve sayfa ikisini de, tek bir yapıştırmada karışık olsalar bile okur.

Beş stil, her biri yapıştırılacağı yere göre şekillenmiş

On altılıkta “Stil” seçicisi aynı baytları beş şekilde dizer; her biri on altılık rakamların sonra gideceği bir yer içindir. Hi için, yani 48 ve 69 baytları için:

  • “Boşluklu”, baytlar arasında bir boşlukla 48 69 verir: okuması ve sayması en kolay olanıdır ve sayfanın açıldığı stildir.
  • “Bitişik”, rakamları birbirine bitiştirerek 4869 verir; bir değeri tek bir on altılık dize olarak alan bir alan ya da parametre içindir.
  • “Dizi”, 0x48, 0x69 verir: her bayt önünde 0x olan bir sayıdır ve aralarında virgül vardır; C, C#, JavaScript, Python ya da Go’da bir bayt dizisine yapıştırılmaya hazırdır.
  • “Kaçışlı”, \x48\x69 verir: her bayt \x ve iki rakamı olarak yazılır; bir bayt, bir C dizesinin ya da b'\x48\x69' gibi bir Python bayt değişmezinin içinde böyle yazılır.
  • “On altılık döküm”, baytları satırlara dizer; her satırın nereden başladığı ve aynı baytların metin olarak hâli yanlarında durur: sonraki bölüm bir tanesini okur.

Okuma, beşini de geri alır; baytlara dokunmayan başka biçimlendirmeleri de: 48:69 örneğindeki gibi iki nokta, .NET’in BitConverter.ToString yönteminin yazdığı, 48-69 örneğindeki gibi tireler, her baytın önünde 0x ya da 0X ve bütün yapıştırılanın bir kez normal, köşeli ya da süslü parantez içine veya tırnak içine alınması. Stil ve harf büyüklüğü yalnızca yazarken önemlidir; bu yüzden yön “On altılıktan metne” olduğunda bu iki seçici kaybolur.

“Kaçışlı” stilinde bir tuzak var. Bir JavaScript dizesinde ya da bir bayt değişmezi değil de sıradan bir Python dizesinde \x bir baytı değil bir karakteri adlandırır; bu yüzden \xD7\x90 orada iki karakterdir, UTF-8 baytları D7 90 olan א değildir. ASCII’nin ötesinde baytları, bayt kabul eden bir şeye verin.

Bir on altılık dökümü sütun sütun okumak

Bir on altılık döküm baytları satır başına on altı tane dizer; onları bulmanıza yardım etmek için her iki yanda birer sütun vardır. “On altılık döküm” stiliyle yazıldığında Hello, World! ve bir satır beslemesi tek bir satırı doldurur: önce ofset olan 00000000, yani satırın ilk baytının sıfırdan sayılarak durduğu yer, sekiz on altılık rakamla; sonra on dört bayt, sekiz ve ardından altı, iki yarının arasında daha geniş bir boşlukla; sonra |Hello, World!.|, yani karakter olarak aynı baytlar; yazdırılabilir ASCII olmayan her bayt, satır beslemesi de dahil, bir nokta olarak gösterilir. Son satırda yalnızca 0000000E bulunur, yani on dört: bir sonraki baytın duracağı yer, dolayısıyla uzunluk. Bu, hexdump -C programının yazdırdığı biçimdir.

  • “On altılıktan metne” seçiliyken ve “Kod noktaları” dışında herhangi bir birimde, yapıştırılan bir on altılık döküm yalnızca baytları için okunur: metin sütunu okumanın dışında bırakılır, hiçbir ofset bayt olarak okunmaz ve sonucun altındaki bir bildirim, girdinin bir döküm olarak alındığını söyler ve biçimin adını verir.
  • Bu şekilde iki biçim okunur: hexdump -C programınınki ve xxd programının seçeneksiz yazdırdığı biçim; ikincisinde her ofsetin ardından iki nokta gelir ve baytlar dört rakamlık gruplar hâlinde durur. xxd -p programının yazdırdığı düz on altılık rakamların bir biçime ihtiyacı yoktur ve diğer on altılık rakamlar gibi okunur.
  • hexdump -C programı, üstündekini tekrarlayan satırların yerine yalnızca * içeren bir satır yazdırır; sayfa bu satırları alttaki ofsetten yola çıkarak yeniden doldurur, böylece baytlar eksiksiz geri gelir.
  • İlkinden sonraki her ofset, hexdump -C programının son satırındaki uzunluk da dahil, üstündeki baytlarla tutmalıdır; ofseti tutmayan bir satır yanlış okunmak yerine orada reddedilir: atlanmış bir satır, kaybolmuş bir bayt ya da yanlış yazılmış bir ofset orada ortaya çıkar. Arkasından hiçbir ofset gelmeyen şey denetlenemez; bu yüzden ilk satırları eksik bir on altılık döküm ya da arkasında uzunluk satırı olmayan bir dökümün sonu, xxd böyle bir satır hiç yazmadığı için, geriye ne kaldıysa o olarak okunur.

UTF-16 LE ve neden her ikinci bayt 00

Windows metni, en az anlamlı bayt önce gelecek şekilde UTF-16 olarak saklar; bu UTF-16 LE’dir. .NET’te bunun adı Encoding.Unicode’dur ve SQL Server da bir NVARCHAR değerini aynı şekilde saklar. UTF-16, U+FFFF sınırına kadar her karaktere iki bayt verir ve U+00FF sınırına kadar olan her şey için — İngilizce harfler, rakamlar, é ve Latin-1’in geri kalanı — en anlamlı bayt 00 olur. En az anlamlı bayt önce geldiği için bu sıfır her harften sonraya düşer: Hi, 48 00 69 00 olur.

SQL Server bir VARBINARY değerini 0x ve ardından on altılık rakamlarıyla gösterir; bu yüzden Hi tutan bir NVARCHAR, VARBINARY türüne dönüştürüldüğünde 0x48006900 olarak görünür. UTF-8 seçiliyken bunu buraya yapıştırın: metin H, bir NUL, i ve bir NUL olarak çıkar ve altındaki bildirim, Latin alfabesiyle yazılmış bir metin UTF-8 yerine UTF-16 ile yazıldığında olduğu gibi, her ikinci baytın 00 olduğunu söyler; yanında “UTF-16 LE’ye geç” düğmesi durur. Ona tıklayın, aynı baytlar Hi olarak okunur.

UTF-16 BE ise en anlamlı baytı öne koyar; bu yüzden orada Hi, 00 48 00 69 olur ve UTF-16 LE’de D0 05 olan א, 05 D0 olur. Her çiftin ilk yerindeki sıfırlar, bildirimin UTF-16 BE önermesine yol açar. Metinde U+00FF sınırının ötesinde bir karakter olduğu anda bildirim hiçbir şey söylemez, çünkü o karakterin en anlamlı baytı 00 değildir; bildirim yalnızca her ikinci baytın öyle olduğu yerde konuşur.

Başta bir bayt sırası işareti

Bir metin, hiçbir şey göstermeyen ve bir bayt sırası işareti olmak için orada duran U+FEFF karakteriyle başlayabilir. UTF-16’da iki baytı, ardından gelen her çiftin sırasını verir: UTF-16 LE için FF FE, UTF-16 BE için FE FF; UTF-8’de ise EF BB BF olmak üzere üç bayttır ve metnin UTF-8 olduğunu gösteren bir imzadır; UTF-8’in tek bir sırası vardır.

Sayfa böyle bir işareti atmak yerine tutar. Seçili birimin kendi işaretiyle başlayan on altılık rakamlar, U+FEFF ile başlayan bir metin olarak okunur ve bir bildirim işaretin tutulduğunu söyler; böylece o metni yeniden yazmak, işaret dahil aynı baytları verir. Öbür UTF-16 sırasının işaretiyle ya da UTF-8 seçiliyken bir UTF-16 işaretiyle başlayan on altılık rakamlar, baytların başka bir birimin işaretiyle başladığını söyleyen bir bildirim alır; yanında da işaretin gösterdiği sıraya geçiren bir düğme durur. Başlangıçtan sonraki herhangi bir yerde U+FEFF sıradan bir karakterdir ve bildirime yol açmaz.

Metin olmayan baytlar, U+FFFD olarak gösterilir

Her bayt dizisi seçili birimde metin değildir: son baytı eksik bir karakter, eski kod sayfalarının é için yazdığı E9 gibi başıboş bir bayt ve UTF-16’nın sonunda artakalan tek bir bayt hiçbir şey oluşturmaz. Yine de tek bir bozuk dizi yapıştırılanı batırmaz: her biri değiştirme karakteri olan U+FFFD ile değiştirilir ve geri kalan her şey normal okunur.

Ardından bir bildirim bunların sayısını verir ve ilkini baytlar arasındaki yeriyle, onun için yazdığınız rakamlarla ve satırı ile sütunuyla adlandırır. Batı Avrupa metinleri için Windows kod sayfası olan Windows-1252 ile kaydedilmiş Café sözcüğü 43 61 66 E9 olur; é orada tek bir bayt, E9 olarak yazılır. UTF-8 olarak okunduğunda Caf ve U+FFFD olarak geri gelir ve bildirim 1. satır, 10. sütunda E9 olarak yazılmış 4. baytı adlandırır. UTF-8’de sözcük 43 61 66 C3 A9 olur.

Bildirim baytları değil dizileri sayar: 😀 emojisinin dört baytından üçü olan F0 9F 98, tek bir U+FFFD olur. Metinde gerçekten bulunan bir U+FFFD, yani EF BF BD baytları ise metin olarak okunur ve hiç sayılmaz; bu yüzden bildirim her zaman yalnızca okunamayan baytlarla ilgilidir.

On altılık rakamları yeniden dosyaya çevirmek

Okuma, metnin yanında baytları da teslim eder. Yön “On altılıktan metne” iken ve UTF-8, UTF-16 LE ya da UTF-16 BE seçiliyken “İndir”, bytes.bin adlı bir dosya olarak, okunan baytları, metin olmayanlar da dahil ve hiçbiri değiştirilmeden önceki hâlleriyle tam olarak kaydeder: xxd -r programının bir on altılık dökümle yaptığı iş budur. Bayt olmayan kod noktaları için “İndir” yoktur; yazarken, yani götürdüğünüz şey rakamlar olduğunda da yoktur.

Böylece hiç metin olmamış bir şeyin on altılık rakamları da bütün olarak geri gelir. Her PNG görüntüsü 89 50 4E 47 0D 0A 1A 0A olmak üzere sekiz baytla başlar; UTF-8 olarak okunduklarında U+FFFD, PNG harfleri ve dört denetim karakteri olarak görünürler, metin olmayan dizi hakkında bir bildirim de çıkar ve “İndir” sekizini de tam olarak kaydeder. Baytların adı olmadığı için dosyanın adı her zaman bytes.bin olur; kaydettikten sonra ona image.png gibi kendi adını verin.

Bir karakter, bitleri ya da bir sayı için nereye gidilir

Bir karakterin ne olduğu — adı, kategorisi ve görünmez karakterlerden biri olup olmadığı — sorusu için Unicode karakter inceleyici bir metni kod noktası kod noktası ayırır ve her birinin UTF-8 baytlarını da gösterir.

Metinden ikiliğe dönüştürücü, ikilikle açılan bu aynı sayfadır; orada UTF-8’in izlediği düzen her baytın ilk bitlerinde okunabilir. Bir sayı da bir metin değildir: buraya girilen 255, 2, 5 ve 5 rakamlarıdır, dolayısıyla 32 35 35 baytlarıdır; Sayı tabanı dönüştürücü ise 255’i bir miktar olarak alır ve on altılıkta ff olarak yazar.

Sıkça sorulan sorular

On altılık rakamları nasıl metne çeviririm?
“On altılıktan metne” yönünü seçin, on altılık rakamları yapıştırın ve birimi, rakamların yazıldığı kodlamaya uyacak şekilde ayarlayın: çoğu metin için UTF-8, bir Windows ya da .NET dizesinden veya bir NVARCHAR sütunundan alınmış on altılık rakamlar için UTF-16 LE. Baytların arasına konan boşluk, virgül, iki nokta ve tire, önlerindeki 0x ya da \x ve bütünün çevresindeki tek bir sarmalayıcı okunurken sorunsuzca geçilir; büyük ya da küçük harf de öyle.
Metnimin her harfinin arasında neden bir NUL var?
Büyük olasılıkla on altılık rakamlar, UTF-8 olarak okunan UTF-16 LE’dir. UTF-16 LE her İngilizce harfi iki bayt olarak yazar: ASCII değeri ve ardından 00; UTF-8 ise bu sıfırların her birini kendi başına bir karakter, NUL olarak okur. UTF-16 LE’yi seçin ya da sayfa bildiriminin yanında sunuyorsa geçiş düğmesine tıklayın; harfler bir araya gelir.
On altılık rakamlarımdaki aksanlı harfler neden U+FFFD olarak çıkıyor?
Büyük olasılıkla on altılık rakamlar Windows-1252 gibi eski bir kod sayfasıyla yazılmıştır; orada é tek bir bayttır, E9. UTF-8’de ise é, C3 A9 olarak yazılır ve tek başına bir E9 metin değildir. Sayfa UTF-8 ve UTF-16 okur, eski kod sayfalarının hiçbirini okumaz; bu yüzden hangisinin kastedildiğini tahmin etmek yerine böyle her diziyi U+FFFD olarak gösterir ve ilkinin nerede olduğunu söyler. “İndir” yine de baytları size oldukları gibi verir.
xxd ya da hexdump -C programının yazdırdığını yapıştırabilir miyim?
Evet: hexdump -C programının biçimi, yani “On altılık döküm” stilinin de yazdığı biçim, ve xxd programının seçeneksiz yazdırdığı biçim okunur. Metin sütunu bir kenara bırakılır ve hiçbir ofset bayt olarak okunmaz, bir * satırı yeniden doldurulur ve bir bildirim iki biçimden hangisinin okunduğunu söyler; önceki baytlarla tutmayan bir ofset, satırlar artık birbiriyle uyuşmadığı için okumayı kendi satırında durdurur. xxd -p programının düz on altılık rakamları da diğer on altılık rakamlar gibi, bildirim olmadan okunur.
On altılık rakamların büyük ya da küçük harf olması önemli mi?
Baytlar için değil: 4A ve 4a aynı bayttır, J. Siz “küçük harf” seçeneğini seçmedikçe sayfa büyük harf yazar ve bu seçim bir on altılık dökümün baytlarının yanı sıra ofsetlerini de kapsar; okuma, tek bir yapıştırmada karışık olsalar bile ikisini de kabul eder.
Bir on altılık dökümden dosyayı nasıl geri alırım?
“On altılıktan metne” yönünü ve UTF-8’i ya da iki UTF-16’dan birini seçin, dökümü ya da düz on altılık rakamları yapıştırın ve “İndir” düğmesine tıklayın. Kaydedilen bytes.bin dosyası, metin olsun olmasın, yapıştırdığınızdan okunan baytları tam olarak tutar; yani “İndir” xxd -r programının işini görür. Dosyaya eski adını verin.
Bir üretim veritabanından ya da bir günlükten alınmış on altılık rakamları yapıştırmak güvenli mi?
Evet, dönüştürme açısından. Dönüştürme, hangi yönde çalışırsa çalışsın, kendi cihazınızda gerçekleşir: yapıştırdığınız on altılık rakamlar, dönüştükleri metin ve “İndir” düğmesinin kaydettiği her dosya hiçbir yere gönderilmez.

İlgili araçlar

  • Metinden ikiliğe dönüştürücü

    İkilik bir baytı sekiz bitiyle yazar ve UTF-8’in düzeni orada okunur: é burada C3 A9, orada 11000011 10101001 olur; harf iki bayt tuttuğu için ilk bayt 110 ile, onu sürdürdüğü için ikinci bayt 10 ile başlar. Bu sayfa da ikilik sunar; o sayfa ikilikle açılır.

  • Unicode karakter inceleyici

    Bir dizenin tam olarak hangi karakterlerden oluştuğunu görün.

  • Sayı tabanı dönüştürücü

    Bu sayfaya 255 yazarsanız, her karakteri için bir tane olmak üzere üç bayt alırsınız: 32 35 35. O sayfa ise 255’i bir sayı olarak okur ve değerin kendisini dönüştürür; on altılıkta bu ff olur.

  • Base64

    Base64 kodlayın ve çözün — tam UTF-8 desteği.