PDA

Tam Sürümünü Görmek İçin : bit field , buffer


p4r4h4t
07/07/2005, 15:45
typedef struct
{
unsigned int v:1;
unsigned int p:3;
unsigned int c:5;
unsigned int x:7;
} foo_t;

elimde shoyle bi struct var.

bu structin icini doldurup buffera yazarak network uzerinden servere
gondermek ve serverde paketi okuyup paketi yine ayni bu structa
donusturmek
istiyorum. bunu nasil yapabilirim?

burada bit bit okumam gerekiyor. memcpy gibi, byte yerine bit
kopyalayan
bir fonksiyon var mi?


naesse
07/07/2005, 17:03
fonk.var mı anımsamıyorum ama union kullansan

typedef struct
{
unsigned int v:1;
unsigned int p:3;
unsigned int c:5;
unsigned int x:7;
} foo_t;/* 16 bit*/

typedef union _foo_u{
foo_t vpcx;
int16 m; /*16bitlik bi tip*/
}foo_u;

foo_u.m ile foo_u.vpcx bellekte aynı yerde olcak bu durumda sen okurken foo_u.m ile alırsın
işlem yaparken foo_t.vpcx i ve yapının elemanlarını kullanabilirsin

acehreli
09/07/2005, 08:44
Bit alanlari bayagi derleyiciye birakilmis bir konudur. Hangi alanlarin bir bellek gozune yerlestirilecekleri, hangilerinin aralarina doldurma bitleri koyulacagi, vs. gibi konulari standart belirlemez.

Bitlerin bellekte nasil oturduklari ayni derleyicide bile degisiklik gosterebilir. Ornegin az bellek kullanmaya yonelik bir eniyilestirme secenegine karsilik hizli calismaya yonelik bir eniyilestirme secenegi bellekte degisik sekillerde oturan alanlara neden olabilirler.

Buna bir de "endianness" konusu eklenince, burada her platformda calisan tek cozum, degerleri teker teker gonderip, yapiyi karsi tarafta tekrar olusturmaktir.

naesse'nin onerdigi gibi bir cozum ancak kaynak ve hedef platformlar onceden biliniyorsa calisabilir. Cunku ornegin, foo_t'nin butun degerlerinin 16 bitlik m ile ayni bellek gozunu paylasacaklari garanti degildir.

Ali

sckz
09/07/2005, 12:17
foo_t'nin butun degerlerinin 16 bitlik m ile ayni bellek gozunu paylasacaklari garanti degildir.Ornegin benim msvc 7, 32 bit diyo..

Euclides
09/07/2005, 12:54
#pragma pack(1)
yaparız ama oda sadece msvc'de var.. (belki borland da vardır ?????)

Volkan Uzun
09/07/2005, 20:44
eminim borlandada vardir bu kadar onemli bir compiler secenegi ama cozum olurmu bu :)