rs232 ile serial porttan float veri almak

Başlatan tntgonzales, 05 Şubat 2015, 15:07:41

tntgonzales

arkadaşlar merhaba, rs232 ile seri porttan float verisi alıyorum. veriyi 4 bayt olarak float cinsinden gönderiyorum. windows form application ile bu veriyi okumaya çalışıyorum. 4 byte lık diziyi düzgün şekilde alıyorum ama bu veriyi float a çeviremiyorum. okumam gereken değer 27.200249 iken okuduğum değer 1104779804 oluyor. bu değerin hex karşılığı ile göndermeye çalıştığım float değerin hex karşılığı aynı ama float olarak yazdıramıyorum. elde ettiğim 4 bitlik diziyi birleştiriyorum. daha sonra  sonra aşağıdaki şekilde işlemleri yapıyorum ama label8in değeri 27.200249 olması gerekirken 1104779804 oluyor. bu konuda yardımcı olabilecek varsa çok sevinirim iyi çalışmalar

decimal combined = ((yeni[4] << 24) | ((yeni[3] & 0xff) << 16) | ((yeni[2] &0xff) <<8 ) | (yeni[1] & 0xff));
                float veri= Convert.ToSingle(combined);
                label8.Text = Convert.ToString(veri) ;

berat23

şu işini görür;

        unsafe float byteToFloat(byte[] t)
        {
            int ret = (int)(t[0] << 0 | t[1] << 8 | t[2] << 16 | t[3] << 24);
            float r = *(((float*)&ret));
            return r;
        }


proje ayarlarından allow unsafe code seçili olmalı.

tntgonzales

Alıntı yapılan: berat23 - 05 Şubat 2015, 16:27:26
şu işini görür;

        unsafe float byteToFloat(byte[] t)
        {
            int ret = (int)(t[0] << 0 | t[1] << 8 | t[2] << 16 | t[3] << 24);
            float r = *(((float*)&ret));
            return r;
        }


proje ayarlarından allow unsafe code seçili olmalı.

teşekkür ederim berat23 bende şöyle bişey yaptım onunla da oldu. belki ilgilenen arkadaşlar olabilir.

Single floatacevirelcekdeger= BitConverter.ToSingle(dizi, 0);