Sorun anlayışı endianness


2

Diyelim ki emacs içinde bir tiff dosyasını açtım ve hexl modunda aşağıdakini görelim:

0x08000400

ve dosyanın endian olduğunu biliyorum. Bu, sayının gerçekte 262152 olduğu, veya

0x00040008 

onaltılı mı? Ondalık sayıma bu dönüşüm 8bit vs 16bit olsaydı farklı olurdu mı?


Bu dosya formatına bağlı değil mi?
kaliban

Ben alıyorum ne dosya biçimi tiff başlık için önemli olduğunu sanmıyorum ... bence tutarlı ve dosya formatı sadece ham görüntü verilerini açıklarken etkili olduğunu düşünüyorum.
Tony Stark

Yanıtlar:


2

8 bitlik değerler için endianness farketmez.
Bunun ötesinde, alanın veri yapısı önemlidir.

Bir bayt akışı olarak küçük bir endian dosyasıyla çalışıyorsanız (burada gösterdiğiniz gibi),
16 bitlik bir değer, yüksek bayttan önceki düşük bayt değerine sahiptir. Yani, "0x08 0x00" 8 değeridir.

Ayrıca, bunu zaten biliyor olabilirsiniz, ama not etmek iyi.
Gönderen Vikipedi TIFF sayfasında ,

Her TIFF, 2 baytlık bir bayt sırası göstergesiyle başlar:
küçük endian bayramı için "II" ve büyük endian baytı siparişi için "MM".
Sonraki 2 bayt
seçilen 42 sayısını temsil eder, çünkü bu 101010 ikili modeli ve
" derin felsefi önemi için " dir.

42 okuma, 2 baytlık göstergeyle gösterilen bayt sırasına bağlıdır.
TIFF dosyasındaki tüm kelimeler, çift kelimeler vb. Belirtilen bayt sırasına göre okunur.

TIFF 6.0 spesifikasyonu, uyumlu TIFF okuyucularının her iki byte sırasını da (II ve MM) desteklemesi gerektiğini söyler, ancak TIFF yazarları, görüntülerine uygun bayt sırasını seçebilir. Bu, görüntü işleme topluluğunun TIFF'in Binlerce Uyumsuz Dosya Biçimi'nin kısaltması olduğu şakasına yol açtı.


Yani sadece netleştirmek için: En08 de küçük bir dosyada 0x08000400, gerçek dünyada 0x00040008 olarak okunmalıdır, hangi ondalık sayıdaki 262152, değil mi? Ayrıca, bu örnekte, bu sayı 32-bit bir sayı mı (4 hex pair ...)?
Tony Stark

1
@hatorade, lütfen 0x08000400farklı olduğunu unutmayın 0x08 0x00 0x04 0x00. Birincisi 32-bit bir kelimedir ve endianness varsayımları ile birlikte gelir, ikincisi endianness ile ilgili olmayan bir bayt dizisidir.
nik

@nik: 08:00, 0x08 0x00 veya 0x0800 değerine dönüşüyor mu? Ben ikincisi olmak istedim. Gerekirse yayınımı düzenleyebilirim.
Tony Stark

1
' :' Ayırıcılarının bir bayt dizisi (endianness çözülmüş halde) ima etmesini bekliyorum . Ayrıca " octet stream" olarak da adlandırılır .
nik
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.