Jon'un yanıt doğrudur Guava (diğer kütüphaneler arasında) kullanabilir, bayt içine bir onaltılık dize ayrıştırmak için, ama ben farklı bunu biraz açıklamak için bir girişim yapmak düşündüm. Kodlama/kod çözmenin zaman zaman biraz kafa karıştırıcı olabileceğini düşünüyorum.
Verilerinizin "hex string" olarak kodlandığını söylediğinizde, bu veriler "oldukça basılabilir" hale getirilir. Aslında, "hex encoding", yazdırmak için herhangi bir ikili veriye yapabileceğiniz en kolay şeydir. Onaltılı kodlamayla, hiçbir ikili veri yazdırılamaz (bildiğimiz bilgisayar sistemlerinde)!
Bunu daha net hale getirmek için, birisinin size "hex kodlanmış" stringi a9
(fikir 07050600030102
ile aynıdır) verdiğini varsayalım. Bu, belirli bir bayt akışını onaltılık karakterler olarak yorumlandığında, a9
olur. Altıgen karakterlerin her biri: [0-9][a-f]
nibble'ı 1111
aracılığıyla kodlayabildiğinden, gerçek bitleri şu şekilde çözebilirsiniz: 1010 1001
(boş kısaltma için kullanılır). Yani, a9
olarak kodlanan hex aslında tek bir bayt 10101001
'dur.
Şimdi, eğer "base64-kodlamak" olsaydı, giriş olarak 10101001
kullanmalısınız! Bayt dizisi açısından bu: {-87}
: -87
, Java'nın tamsayı değerlerinin iki tamamlayıcı sunumunda bit dizisinin 10101001
ondalık değeridir.
yapmanız ise (varsayılan karakter kümesi bilgisayarınızda UTF-8
ise) hexString.getBytes(StandardCharsets.UTF_8)
veya hexString.getBytes()
, o zaman bu kodlama UTF-8
kodlama ve yana göre yorumlanır hexString
bayt almak için gidiyoruz ASCII ile uyumludur kodlama, ne olacaktı karakteri 'a'
temsil 97
ondalık (veya 01100001
ikili) ilk bayt olan bir 2-bayt dizidir ve ikinci bayt karakter '9'
(temsil ondalık 57
, (veya ikili 00111001
) 'dir ondalık 9). Böylece, getBytes()
çağrısından alacağınız bayt dizisi: {97, 57}
.
Gördüğünüz gibi, bu ikisi iki farklı şeydir. {-87}
dizisiyle temsil edilen base64 kodlama baytlarını temel almak istiyorsunuz, ancak {97, 57}
dizisiyle temsil edilen base64 kodlama baytlarını sonlandırdınız.
Karakter verisini (sayısal değer değil) base64 olarak kodlar. Onaltılı değeri istiyorsanız, önce bir sayı olarak ayrıştırmanız gerekir. – resueman
En çok hexidecimalin kodunu çözmeniz ve kodunuzu decode kodlamak yerine base64 olarak kodlamanız gerekir. –