Okuma baytları gerektiren ve dizeler oluşturma konusunda bir şeyler üzerinde çalışmaya başlamak üzereyim. Okunan baytlar UTF-16 dizelerini temsil eder. Sadece bir şeyleri test etmek için UTF-16 kodlamasında basit bir bayt dizisini bir dizeye dönüştürmek istedim. Dizideki ilk 2 bayt, endianlığı temsil etmeli ve 0xff 0xfe veya 0xfe 0xff olmalıdır.Java örtülü bayt için örtük dönüşümü
byte[] bytes = new byte[] {0xff, 0xfe, 0x52, 0x00, 0x6F, 0x00};
Ama 0XFF ve 0xFE (bayt Java imzalanan çünkü) bir bayt sığmayacak kadar büyük olduğu için ben bir hata var: Ben şöyle benim bayt dizisi oluşturma çalıştı. Daha doğrusu hata, int'nin bir byte dönüştürülememesiydi. Ben sadece int ve bayttan bir alçı ile açıkça dönüştürebildiğimi ve istenen sonuca ulaşabileceğimi biliyorum, ama bu benim sorumun konusu değil.
Sadece bir şey denemek için bir Dize oluşturdum ve getBytes ("UTF-16") olarak adlandırdım ve dizideki her bayttan birini bastım. Çıktı biraz kafa karıştırıcıydı çünkü ilk iki bayt 0xFFFFFFFE 0xFFFFFFFF, ardından 0x00 0x52 0x00 0x6F idi. (Buradaki enderlik, yukarıda yaratmaya çalıştığımdan farklıdır, fakat bu önemli değildir). Ben denemek ve benim bayt dizisi aynı şekilde oluşturmaya karar bu çıkışı kullanarak
:
byte[] bytes = new byte[] {0xffffffff, 0xfffffffe, 0x52, 0x00, 0x6F, 0x00};
Ve garip iyi çalıştı. Bu yüzden benim sorum, Java'nın neden 0xFFFFFF80 veya daha büyük bir tamsayı değerine izin vermesi, açık bir döküm olmadan otomatik olarak bir bayta dönüştürülmesine izin veriyor, ancak 0x80 değerine eşit veya daha büyük bir şey açık bir döküm gerektiriyor mu?
Teşekkürler, bu daha net hale getirir. – DaveJohnston