CodeBlanks Logo Icon CodeBlanks

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

main.c
#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

main.c
#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

Soru
unsigned short packed = (hi << 8) | ____;
Cevap
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.

Orta seviye bölümündeki tüm dersler