Binary Dosyadan Okumak Ve Okuduğunu Anlamak (Java)
-
Sayın Müridler,
Little Endian kodlanmış bir binary file var elimde. Bundan önce header kısmını okuyup bilgi edinmem sonra da o bilgiler ışığında kalan kısmı okumam lazım. Fakat byte byte okuma işi kafamı karıştırdı.
Örneğin header 4-byte integer ile başlıyor. Bu 4 byte'ı BufferedInputStream kullanarak okumayı düşünüyorum. Sonrasında byte arrayda bunu gelen 4 byte'ı tutunca onun hangi integer'a eşdeğer olduğunu nasıl anlarım?
Aynı problem string ve floating point için de var.İşin içinden çıkamadım, bi tutun elimden.
-
up yapalım cevaplayacak biri çıkar herhalde koskoca tahribatta
-
bi kaç kere okudum anlamadım ya ben karıştırıyorum ya sen terimleri karıştırıyorsun
4-byte integer ne demek? byte veri tipi max 255 e kadar gidiyor, kast ettiğin 4 bytelık veri mi? yoksa byte türünden bir veri mi yoksa 4 bit mi? ve integer bunun neresinde?
sonra da string ve float için problem var demişsin bir byte dizinde ne işleri var bunların? yani sorun hiç açık değil ve çok karmaşık geldi..
-
Hocam bende anlayamadim yazdiklarini Olayin byte kismina takilma nedenini anlayamadim.karakterler buffera byte olarak gidiyor.boyutlarindan cikarinimda mi bulunmak istiyorsun anlamadim? Senin byte mevzuuna takilmaman gerekiyor. Amacin sayilari bosluga dek okumak mi?
-
olayı çözdüm gibi
ardışık byte'lar 65 00 00 00 olsun
little endian olduğu için bunlar 00000065 şeklinde birleştirmemiz gerekiyor bu da ondalık sistemde 101 sayısına denk geliyor. Yanlışım varsa düzeltin.
String için de zaten her byte bir karakter oluyormuş onu da çözdüm ama floating point'i çözemedim
yine bu şekilde 4 byte'ı birleştirip bir floating point oluşturmam gerekiyor.
-
şimdi hocam dediğim gibi byte daki en büyük sayı 255 tir, şimdi sen
65 00 00 00 şeklinde bölüp
000065 e de 101 dersen işler karışır. mesela o dizide gelen sayı 125 olsaydı 65 yerine
0000125 bunu 10 luk sisteme 16 lık sisteme göre çevirmek mantıklı değil.. çünkü 16 lık sistem olduğunu nerden biliyorsun?
ayrıca 65 eğer bir karakter kodu ise bu ascii dir muhtemelen ve 65 in karşılığı da A dır
belki bunlar fikir verebilir, çok açık yazmadığın için ne istediğini anlamadığımdan bir şeyler söylüyorum :))
-
http://www.darkfader.net/toolbox/convert/
Integer, IPV4, color kısmında anlatmaya çalıştığım şey var byte dizisinin 12 15 16 28 olduğunu düşünelim (her byte 16lık tabanda yazılı).
Integer olarak 672535826 sayısına denk geliyor little endian kodlamada.
Bir de aynı şekilde 4 byte'ı kullanarak floatin point decode etmem gerekiyor. Onu beceremedim.