Pack ve unpack
- C kursu
- Orta seviye
- Ders 104/116
- 5 dk
Bit pack ve unpack ile veri sıkıştırma öğrenirsin.
Pack: iki baytı birleştir
Pack işlemi, iki küçük değeri tek bir büyük değerin içine yerleştirmektir. İki baytı bir short'a paketlemek için kaydırma ve VEYA kullanılır.
Örnek: unsigned short packed = (hi << 8) | lo;. Burada hi üst bayt, lo alt bayttır. hi sekiz basamak sola kaydırılır; böylece üst bayt konumuna gelir. Sonra lo ile VEYA'lanır; alt bayt yerleşir. Sonuç, iki baytın yan yana durduğu bir short'tür. Bu teknik, renk kodlarını, donanım yazmaçlarını ve ağ paketlerini sıkıştırmak için kullanılır.
Unpack: baytları ayır
Unpack, paketlenmiş bir değeri bileşenlerine ayırır. Alt baytı almak için & 0xFF, üst baytı almak için >> 8 kullanılır.
Örnek: unsigned char unpack_lo = packed & 0xFF; alt baytı verir. unsigned char unpack_hi = packed >> 8; üst baytı verir. 0xFF ikili olarak 11111111'dir; VE işlemi yalnızca alt sekiz biti tutar, üst bitleri sıfırlar. Kaydırma ise üst baytı alt bayt konumuna taşır. Bu iki işlem birlikte, paketlenmiş bir değerin tüm bileşenlerini çıkarır. Ağ protokollerinde ve dosya biçimlerinde sürekli kullanılır.
Uygulama Pack ve unpack yaz
unsigned char lo = 0x34; ve unsigned char hi = 0x12; tanımla. unsigned short packed = (hi << 8) | lo; hesapla. printf("%u\n", packed); yazdır. unsigned char unpack_lo = packed & 0xFF; ve unsigned char unpack_hi = packed >> 8; hesapla. printf("lo=%u hi=%u\n", unpack_lo, unpack_hi); yazdır.
Başlangıç kodu
#include <stdio.h>
// lo ve hi değişkenlerini tanımla
// packed değerini hesapla ve yazdır
// alt ve üst baytları ayır ve yazdır
int main(void) {
return 0;
}Örnek çözüm
#include <stdio.h>
int main(void) {
unsigned char lo = 0x34;
unsigned char hi = 0x12;
unsigned short packed = (hi << 8) | lo;
printf("%u\n", packed);
unsigned char unpack_lo = packed & 0xFF;
unsigned char unpack_hi = packed >> 8;
printf("lo=%u hi=%u\n", unpack_lo, unpack_hi);
return 0;
}Beklenen çıktı
4660 lo=52 hi=18
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Pack/unpack işlemlerini eşle
| Kavram | Anlamı |
|---|---|
hi << 8 |
Üst bayt konumu |
| lo |
Alt bayt yerleşimi |
& 0xFF |
Alt bayt ayır |
>> 8 |
Üst bayt ayır |
2 Pack ifadesini tamamla
unsigned short packed = (hi << 8) | ____;
unsigned short packed = (hi << 8) | lo;
Açıklama: (hi << 8) | lo; iki baytı paketler.
3 packed & 0xFF ne verir?
- Üst baytı
- Alt baytı Doğru cevap
- Tüm değeri
- Sıfırı
Açıklama: 0xFF yalnızca alt sekiz biti tutar; üst bitleri sıfırlar.