arkadaşlar merhaba c# ile seriporttaki makine ile iletişim kuran bir program yapmaktayım. Küçük bir problemim var inş. yardımcı olursunuz. makinaya komutları byte byte 0x05 hex şeklinde yolluyorum. Ancak bazı komutlarda kullanıcıdan veri almak zorundayım. Bu konuda biraz sıkıntım var. textboxta girilen veriyi örneği "01" asciiye çevirip hexadecimal karşılığını buluyorum. 0 = 30 1 = 31 gibi. Ancak makineye komutları 0x30 ve 0x31 şeklinde byte olarak yollamak zorundayım diğer türlü makine tepki vermiyor.

örnek vericek olursam command(0x30, 0x31); komutu bu şekilde yolluyorum çalışıyo ancak komutta kullanıcıdan veri almam gerekiyor. aldığım stringi bu tarzda byte verisine nasıl çeviririm?


şu ana kadar yaptığımıda sölersem örneğin 01 girildiğinde bunu a = 30 ve b=31 olarak iki değişkene attım. bunu a=0x30 ve b = 0x31 şeklinde nasıl yapabilirim?

soruldu: 30 Tem '13, 03:30

karvital's gravatar image

karvital
569915
cevap kabul oranı: 100%

değiştirildi: 07 Ağu '13, 09:14

%C3%B6zcanacar's gravatar image

özcanacar ♦♦
17.2k59183183

yani stringlerin başına "0x" eklemek yetiyor mu?

(30 Tem '13, 03:33) AliRıza Adıyahşi ♦ AliR%C4%B1za%20Ad%C4%B1yah%C5%9Fi's gravatar image

stringin başına "0x" ekleyip onu string yaparsın benim byte olarak tutmam gerikiyor. eğer string "0x" şeklinde olunca Convert.ToByte çalışmıyor. x harfini çeviremiyor anlicağın

(30 Tem '13, 03:36) karvital karvital's gravatar image

x harfini çeviremiyor ise sen 0x30 komutunu nasıl yolluyorsun. onu nasıl yolladığını açıklarsan sonuca daha rahat gidilir.

(30 Tem '13, 03:41) Erdemym Erdemym's gravatar image

şöyle byte değişkeninde 0x30 yazında bunun hexadecimal olduğunu makina anlıyo ve o şekilde çalışıyo. butonun clickine direk komutu yazıyorum ve çalışıyo. anca bir komutta veriyi kullanıcı girmesi geriyor. bunu 0x30 şeklinde byte bi veriye dönüştürmem gerekiyor. Açıklayıcı oldu umarım

(30 Tem '13, 03:43) karvital karvital's gravatar image

Bir kaç satır kod yazmanız daha iyi fikir verebilirdi. Makina tepki vermiyor derken ne hata alıyorsunuz? fonksiyonlar içerisinde veri tiplerini nasıl kullandıgınızı daha net gormek için bir kac satır kod gormek iyi olur.

(30 Tem '13, 04:41) AliRıza Adıyahşi ♦ AliR%C4%B1za%20Ad%C4%B1yah%C5%9Fi's gravatar image

byte[] hex = {0x30,0x31} serialPort1.Write(hex, 0, hex.Length); kod örneği bu hex dizisini elimle programda girdiğimde sıkıntı yok ancak dışarıdan alınca sıkıntı oluyo. hexadecimale çeviriyorum ancak 0x05 şeklinde yazmayınca makine bunun hexadecimal olduğunu anlamıyo. Yani benim aslında hexadecimal olan sayıyı makinaya hexadecimal olarak göstermem lazım direk 30 gönderince bunu algılamıyo.

(30 Tem '13, 05:17) karvital karvital's gravatar image

Makinadan aldığım hatadan bahsedersek byte[] hex = {30,31} serialPort1.Write(hex, 0, hex.Length); kodu bu şekilde yollarsam makina geçersiz adres diyo ancak byte[] hex = {0x30,0x31} serialPort1.Write(hex, 0, hex.Length); şeklinde yollarsam EEPROM 01 adresi olarak görüyo....

(30 Tem '13, 05:17) karvital karvital's gravatar image
7 yorumdan 5 tanesi gösteriliyor hepsini göster

arkadaşlar kendi soruma kendim cevap vermiş oluyorum ama :D bunu yaptım çalışıyo. sonradan bakan arkadaşlara yardımcı olur belki. bu arada fonksiyona giden değişken hexadecimal...

private byte hexadecimal_convert(byte value) {

        switch (value)

        {

            case 30: value = 0x30; break;

            case 31: value = 0x31; break;

            case 32: value = 0x32; break;

            case 33: value = 0x33; break;

            case 34: value = 0x34; break;

            case 35: value = 0x35; break;

            case 36: value = 0x36; break;

            case 37: value = 0x37; break;

            case 38: value = 0x38; break;

            case 39: value = 0x39; break;

            case 41: value = 0x41; break;

            case 42: value = 0x42; break;

            case 43: value = 0x43; break;

            case 44: value = 0x44; break;

            case 45: value = 0x45; break;

            case 46: value = 0x46; break;

            default: break;

        }

        return value;
    }
permanent link

cevaplandı: 30 Tem '13, 05:55

karvital's gravatar image

karvital
569915
cevap kabul oranı: 100%

aynı sorun bendede var kullanıcıdan girilen değeri alıp başına 0x koyuyorum fakat string oluyor bana 0x değerinin int gibi bişi olması lazım

mesela kullanıcı 68 giriyor program bunu "0x68" algıladı fakat bunu işlemem için string değil sayı değeri lazım...

permanent link

cevaplandı: 25 Haz '15, 05:17

speed5858's gravatar image

speed5858
0
cevap kabul oranı: 0%

Ilk once sunu soylemek lazim, hexadecimal byte diye bir sey yok. Byte byte'tir. Eger bir byte'i text olarak gostermek istersen bir format kullanman gerekir, decimal, hexadecimal, binary vs (48 = 0x30 = 00110000).

Bu kisa aciklamadan sonra, ekrandan alinan bir string byte array'a basitce su sekilde cevrilebilir.

string input = "01";
byte[] bytes = Encoding.ASCII.GetBytes(input);

yada

byte[] bytes = input.Select(c => (byte)c).ToArray();
permanent link

cevaplandı: 31 Eki '15, 17:07

eser's gravatar image

eser
(üyeliği donduruldu)
cevap kabul oranı: 0%

değiştirildi: 31 Eki '15, 17:26

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×238
×3
×1

Soruldu: 30 Tem '13, 03:30

Görüntüleme: 1,812 kez

Son güncelleme: 31 Eki '15, 17:26

powered by BitNami OSQA