Hex kodlaması nasıl çalışır
Bir sayfadaki her karakter, bir veya daha fazla bayt olarak saklanır. Hex kodlaması, bu baytları taban 16 ile yeniden yazar; bayt başına iki karakter kullanarak bayt akışı özel araçlar olmadan okunabilir hale gelir.
- Metni baytlara kodlayın. UTF-8 modu, girişi
new TextEncoder().encode(text)üzerinden geçirir ve bayt değerlerinden oluşan birUint8Arraydöndürür. Latin-1 modu, eski ISO-8859-1 kod çözücülerinin gerçekleştirdiği dönüşüm olancharCodeAt(0) & 0xFFaracılığıyla her kod biriminin düşük sekiz bitini alır. - Her baytı iki hex basamağı olarak gösterin. Her bayt,
byte.toString(16).padStart(2, "0")aracılığıyla iki hex basamağına eşlenir. Harf tipi seçeneği, çıkış harflerinde büyük harf (A-F) veya küçük harf (a-f) seçimini belirler. - Gruplama ve önek uygulayın. Gruplama, baytlar arasına ayraç ekler: tek boşluk, tire veya her dört bayta bir boşluk. 0x öneki, C dizileri ve ikili fark araçlarının beklediği kurallara uygun biçimde tüm dizeye bir kez (Yok gruplamada) veya bayt başına (Boşluk gruplamada) eklenebilir.
- Ters yönde çözün. Hex → Metin modu, girişten tüm boşluk, tire ve
0xöneklerini soyar; kalan karakterleri/^[0-9a-fA-F]+$/ile doğrular; tek sayıda basamaklı dizeleri reddeder ve ardışık bayt çiftlerinden birUint8Arrayyeniden oluşturur. UTF-8 modu bu diziyinew TextDecoder("utf-8", { fatal: true })ile çözer; Latin-1 modu her baytıString.fromCharCode(b)ile eşler. - Hızlı yineleme için canlı mod. Canlı mod varsayılan olarak açıktır. Her tuş vuruşu, Dönüştür düğmesine tıklamadan yapıştırmanıza, düzenlemenize ve diğer bölmenin güncellenmesini izlemenize olanak tanıyan 150 ms gecikmeli bir yeniden dönüştürme zamanlar.
Hex dönüştürücü neden kullanılır
- İkili protokollerde hata ayıklama. Modbus, DNP3 ve CoAP gibi tel biçimleri, başlıklarını belirli bayt konumlarına sıkıştırır. Yakalanan bir çerçeveyi hex olarak okumak her alanı bir bakışta gösterir; aynı baytları ASCII’ya çevirmek, ikili çerçevelemenin yanında gizlenen düz metin yükünü ortaya çıkarır.
- Gömülü üretici yazılımı ile çalışma. JTAG ve SWD sondaları bellek içeriğini hex olarak raporlar. Bir bellek bölgesini ASCII’ya çevirmek, yazılımda nerede olduğunuzu çoğunlukla işaret eden gömülü dizeleri (dosya yolları, hata mesajları, satıcı imzaları) ortaya çıkarır.
- Paket yakalamalarını okuma. Wireshark ve tcpdump, her paketi solda hex ve sağda ASCII olarak yazdıran bir bayt bölmesi sunar. Buraya bir parça yapıştırmak, hex bloğu bir hata raporundan veya sohbet günlüğünden kopyalamanıza ve baytların ne söylediğini yakalama aracına yeniden aktarmadan okumanıza olanak tanır.
- Bayt düzeyinde farklar. İki ikili dosyayı karşılaştırmak çoğunlukla hangi baytların değiştiğini bulmaya dayanır. Her iki tarafı da tutarlı bir gruplamaya sahip hex biçimine dönüştürmek, yerleşik fark aracının değişen baytları vurgulayabileceği bir metin düzenleyicide hizalanmış bir fark oluşturur.
Yaygın uygulamalar
Hex ↔ ASCII dönüşümü, tersine mühendislik, güvenlik ve gömülü çalışmalar genelinde bir bayt akışının düz metin yükünden fazlası olduğu her yerde ortaya çıkar.
- Tersine mühendislik: strings’e dirençli bir ikili dosyadan hex dökümü alın, yazdırılabilir ASCII olarak çözümlenen çalışmaları seçin ve bu dizeleri kullanarak ayrıştırma içinde nerede olduğunuzu sabitleyin.
- Ağ adli analizi: Wireshark’tan tek bir paket yükünü hex olarak kopyalayın, buraya yapıştırın ve tüm yakalamayı dışa aktarmadan uygulama katmanı metnini okuyun.
- Kripto materyal işleme: bir anahtar, IV veya HMAC etiketi çoğunlukla hex dize olarak gelir. Baytlara geri çözmek, yapılandırmaya girmeden önce uzunluğun algoritmaya uyduğunu doğrular (AES-128 için 16 bayt, AES-256 için 32).
Çalışmalı bir örnek
Metin → Hex, UTF-8, küçük harf, Her bayta boşluk gruplamayı, önek kapalı seçin. Hi yazın: çıkış 48 69 gösterir. Öneki açın ve gruplamayı Yok olarak değiştirin; aynı giriş 0x4869 olarak görüntülenir. 😀 emojiyi giriş olarak yapıştırın; UTF-8 modu f0 9f 98 80 üretir — bir kod noktası için dört bayt, bu yüzden emojiler iletim boyutunu artırır. Hex → Metin’e geçin ve 0x48-65-6C 6C 6F yapıştırın: ayrıştırıcı öneki, tireleri ve boşlukları soyarak Hello’yu yeniden oluşturur.
FAQ
Hex kodlaması nedir?
Hex kodlaması (onaltılık kodlama), bir bayt akışını taban 16 ile yazar; bayt başına iki ASCII karakteri kullanır. Her hex basamağı dört biti kapsar; bu nedenle iki basamak bir sekiz bitlik baytı kapsar. Alfabe 0-9 ardından A-F (veya a-f) ile devam eder; harf tipi yalnızca sunum tercihidir ve çözücüler her ikisini de kabul eder. Hex, protokol özelliklerinde, hata ayıklayıcı çıktısında ve kripto anahtarlarında ham baytları yazmanın standart yoludur; çünkü ikiliden iki kat daha kompakttır ve metin içindeki ham baytların yazdırılamaz karakter sorunlarını ortadan kaldırır.
Emojim neden hex’te 4 bayta dönüşüyor?
UTF-8, değişken uzunluklu bir kodlamadır. ASCII karakterler (U+0000 ila U+007F) bir bayt, Latin-1 ekleri iki bayt, çoğu diğer BMP kod noktası üç bayt alır; U+FFFF’in üzerindeki karakterler — çoğu emoji dahil — dört bayt alır. Gülen yüz 😀 U+1F600’dir ve F0 9F 98 80 olarak kodlanır. Sabit genişlikte bayt görünümüne ihtiyaç duyarsanız Latin-1’e geçin; ancak Latin-1 yalnızca ilk 256 kod noktasını kapsar, bu aralığın dışındaki herhangi bir karakter gidiş-dönüş yapamaz.
Latin-1 / ISO-8859-1 destekleniyor mu?
Evet. Metin kodlaması seçeneğini Latin-1 (ISO-8859-1) olarak değiştirin. Kodlama, eski tek baytlı eşlemeyle eşleşen her JavaScript kod biriminin düşük sekiz bitini alır (charCodeAt(0) & 0xFF). Çözme, her bayt için String.fromCharCode(byte) kullanır. Her baytın tam olarak bir karaktere karşılık geldiği eski Windows-1252 veya Unicode öncesi sistemlerin çıktısıyla çalışırken Latin-1’i kullanın.
Dönüştürme tarayıcımda mı yapılıyor?
Evet. Dönüştürücü, TextEncoder, TextDecoder ve küçük bir ayrıştırıcıyı tek bir statik sayfa olarak çalıştırır. Yükleme yok, API çağrısı yok ve yapıştırdıklarınız üzerinde analitik yok — yalnızca site genelinde paylaşılan standart sayfa yükleme metrikleri. Burada gördüğünüz hex baytları, aynı girişe karşı bir Node betiği veya Lambda fonksiyonu tarafından üretilecek baytlarla aynıdır.
Hex ↔ ASCII dönüşümü, ikili protokollerle veya gömülü üretici yazılımıyla çalışan herkesin günde birkaç kez yaptığı küçük bir iştir. Bunu tarayıcı sekmesinde, Node ve V8’in zaten kullandığı yerel kodlayıcılarla yapmak işi hızlı tutar ve bayt akışını makinenizde bırakır.