Hex içerikli Dizi elemanlarını Birleştirmek

Başlatan vitruvius, 16 Ağustos 2014, 17:19:14

vitruvius

Merhaba,

Uart ile aldığım datayı parça parça bir dizi içine yazıyorum. Bu datayı bir bütün olarak decimal şekilde dışarı vermek istiyorum. Ancak bu çevirmeyi nasıl yapacağımı bilemedim.

Şöyle ki dizi elemanlarım sırasıyla: 1F, 49, 30 olsun. Bunu nasıl 0x1F4930 şeklinde tek bir değişken haline getirebilirim? Hex'den decimal'e dönüşüm işini strtol ile yapmayı planlıyorum. Yazılımı C dili ile yazıyorum.

Teşekkürler.

Gökhan BEKEN

Alıntı yapılan: vitruvius - 16 Ağustos 2014, 17:19:14
1F, 49, 30 olsun. Bunu nasıl 0x1F4930 şeklinde tek bir değişken haline getirebilirim?
kaydırma yaparak yapabilirsiniz.
int sonuc,birinci,ikinci,ucuncu;
birinci=0x1F; // 0x1F sayısını şu hale getirmeniz lazım: 0x1F0000
ikinci=0x49; // 0x49 sayısını şu hale getirmeniz lazım: 0x004900
ucuncu=0x30; // 0x30sayısını çevirmenize gerek yok, 0x000039=0x39 demektir

birinci=birinci<<16; //16 kere sola kaydırırıyoruz
ikinci=ikinci<<8; //8 kere sola kaydırıyoruz
sonuc=birinci+ikinci+ucuncu;
Özel mesaj okumuyorum, lütfen göndermeyin.

kimlenbu

Bugün başka bir arkadaş daha sordu, aşağıdaki makroyu kullanabilirsiniz :

//degisken = 0x1234 olsun BYTE(degisken,0) yazinca 4 döndürüyor. BYTE(Degisken,0)= 9 yazınca degisken 0x1239 oluyor.
#define BYTE(var,index) *(((unsigned char*)&var)+index)

RaMu

Hangi derleyiciyi kullandığını bilmiyorum,
misal ccsc için örnek vereyim,
kullandığın c derleyicisi içinde muhtemelen bu özellik vardır,
make32 kullanabilirsin,
değişkenin 32 bit olacak, sen 24 bit istemişsin ama.

Alıntı Yapmake32()

Parametre olarak verilen 8 bit veya 16 Bit değerlerden 32 bit değer oluşturmak için kullanılır. Kullanılışı şu şekildedir;

make32(deger1,deger2,deger3,deger4)

Parametrelerin ikisi opsiyoneldir, degerlerin 1 kısmı 16 bir kısmı 8 bit olabilir

int x,y,z,t;
long a,b;
int32 c;

x = 0xd1; y= 0x12; z = 0x55; t=0xa9;
a= 0xf301; b =b7c4;

c = make32 (x,y,z,t); // c = 0xd11255a9 olur
c = make32(b,a) // c = 0xb7c4f301 olur
c = make32(x,a); // c = 00d1f301 olur (değer 00 ile 32 bite tamamlanır)

http://www.teknobakis.com/ccs-c-ile-pic-programlama-bit-ve-byte-islemleri-dahili-fonksiyonlari
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html