Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

c#int to byte sorusu

Başlatan Karamel, 26 Ağustos 2015, 07:00:02

Karamel

merhaba. hocalarima bu gun birsey danismak istiyorum.

usb yi halledince. c# ile umng dll i kullanarak haberlesme yapmaya calistim. bunda basarili oldum. yalniz surada takildim. usb ye her bir byte ina 0 ila 255 arasinda degisen bir sayiyi c# ile yazmak istiyorum ama bunu nasil yapildigini anlayamadim.

mesela
int a; // a adinda bir variable imiz olsun.

a = 205;


simdi bunu usb nin byte diye tanimlanmis. giden_buffer[0] inci byte inin icersine nasil yazabilirim? convert.tobyte method unu kullaninca sanirim asagidaki gibi yapiyor.
giden_buffer[0] = '2';
giden_buffer[1] = '0';
giden_buffer[2] = '5';


ben ise bunu istiyorum.  :-\
giden_buffer[0] = 0xCD;

MrDarK

Şöyle dene birde :)

int a; // a adinda bir variable imiz olsun.

a = 205;

giden_buffer[0] = a;


Şeklinde yaptığında C# ne diyor ? Cast hatası mı veriyor ?
Picproje Eğitim Gönüllüleri ~ MrDarK

XX_CİHAN_XX

Tanımlanan dizi değişkeninin tipi nedir?
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

sadogan

Buffer tanımlamasını bu şekil deneyebilirmisin.
Byte[] giden_buffer = {0,0,0,0};

Gökhan BEKEN

0-255 arası çalışsın istiyorsan Byte yapmak zorundasın.
c# ta dizi böyle oluşturuluyor:
Byte[] numbers; // declare numbers as an int array of any size
numbers = new Byte[10];  // numbers is a 10-element array
Özel mesaj okumuyorum, lütfen göndermeyin.

Karamel

#5
Alıntı yapılan: MrDarK - 26 Ağustos 2015, 08:22:46
Şöyle dene birde :)

int a; // a adinda bir variable imiz olsun.

a = 205;

giden_buffer[0] = a;


Şeklinde yaptığında C# ne diyor ? Cast hatası mı veriyor ?

evet hocam. simdi deneyi yaptim. cast hatasi veriyor  :-\

Alıntı yapılan: XX_CİHAN_XX - 26 Ağustos 2015, 10:11:08
Tanımlanan dizi değişkeninin tipi nedir?


hocam byte seklinde oldugunu yazmistim ilk message imda?  :-\



mesaj birleştirme:: 26 Ağustos 2015, 12:15:17

Alıntı yapılan: Gökhan BEKEN - 26 Ağustos 2015, 11:10:38
0-255 arası çalışsın istiyorsan Byte yapmak zorundasın.
c# ta dizi böyle oluşturuluyor:
Byte[] numbers; // declare numbers as an int array of any size
numbers = new Byte[10];  // numbers is a 10-element array

hocam usb icin boyle tanimlamistim.
        byte[] giden_buffer = new byte[64];
        byte[] gelen_buffer = new byte[64];




mesaj birleştirme:: 26 Ağustos 2015, 12:20:03

yalniz soyle birseyde var ki.

usb array ine yazi yazabilmek icin variable lar soyle tanimli idi.

string s = "birseyler";
giden_buffer = UnicodeEncoding.Default.GetBytes(s);


ben mesela s in icersinde bir textbox in icerigini yerlestirip. kolayca gonderebildim. ama character character gidiyor. ornegin bir byte variable i textbox in icersine ascii character olarak yazabilsem(mesela int in icersi 65. textbox icersinde "a" seklinde gorunse)

s variable inin icersine bu textbox i yerlestirir. sonrada gonderebilirim herhalde?  :-\

mesaj birleştirme:: 26 Ağustos 2015, 12:32:05

simdi deneyi yaptim.

textBox1.Text = textBox1.Text + Convert.ToString(a);

diyince textbox icerisi "205" oluyor. halbuki 205 e karsilik gelen ascii character ciksa. sanirim sorun cozulur.

mesaj birleştirme:: 26 Ağustos 2015, 12:48:06

simdi deneyi yaptim

Convert.ToChar(a) diyince character e ceviriyor ama birsey farkettim ki mesela 0 i textbox icersine yerlestirmiyor.

MrDarK

#6
Karamel aşağıdakini kullan;

Denenmiştir.

            Byte[] numbers; // declare numbers as an int array of any size
            numbers = new Byte[10];  // numbers is a 10-element array

            int a = 205;

            numbers[0] = Convert.ToByte(a);


Textbox içerisinde 0 göremezsin. 0 bir hex sayıdır. Textbox'a sadece ascii olan bilgileri gösterebilirsin. Ascii yapmak istersen bir rakamı +0x30 eklemen gerekir.
Picproje Eğitim Gönüllüleri ~ MrDarK

Karamel

evet hocam ::) bu code lar calisiyor. c# ta neden bu kadar cok variable conversion var hocam?  :-\

visual basic 6 da mesela text6 = "abcd" ile text6.text = "abcd" arasinda bile sorun cikartmiyordu. cunku compiler biliyor text in icersine yazmamiz gerektigini.

text box icersinde sadece rakamlar varsa bunu sayi olarak direkman baska bir yerde kullanabiliyordu. c# ta neden hep conversation islemleri var ki?

mesela neden compiler

int a = 5;
byte b=0;


b=a;

diyince int variale i 255 ten buyuk degil. boylelikle sorun cikmayacak. bu adam bu iki variable i birbirine donusturmek istemis ama uzun uzun da yazmak istememis demiyor?  :-\

Gökhan BEKEN

Alıntı yapılan: Karamel - 26 Ağustos 2015, 15:35:19
mesela neden compiler

int a = 5;
byte b=0;


b=a;

diyince int variale i 255 ten buyuk değil. boylelikle sorun cikmayacak. bu adam bu iki variable i birbirine donusturmek istemis ama uzun uzun da yazmak istememis demiyor?  :-\
Adı üzerinde "değişken", yani "sabit" değil, sen şimdi birine 5 verir diğerine 0 verirsin.
Ama run time'da farklı değerler gelebilir. Zaten compiler bunu arakod'a çevirirken bunları otomatiğe bağlıyor, tek tek bu 255'ten küçük buna bir kıyak yapalım diyemez. Program iş mi yapsın, senin verilerini mi tek tek kontrol etsin? :D

Yüksek seviyeli diller, kullanıcıyı aptal yerine koyar, visual basic .net , c#'a göre daha yüksek seviye olduğu için, adı üstünde "basic" senin verilerine çok karışmaz, çünkü  onun gözünde "aptal" sın. Bu da programın hantal çalışmasına sebep olur.
Günümüzde bilgisayarlar tarla gibi ram hayvan gibi işlemci kullandığı için, bunlar çok fark edilmiyor tabi.
Özel mesaj okumuyorum, lütfen göndermeyin.

Karamel

hocam daha ust seviye projeler nasil yapilir. iyi yazilimlar nasil yazilir? gercekten basarili diyebilecegimiz algorithm lar nasil yapilir bilmedigimden bu soylediklerinizi anlayamiyorum.  :-\

yani bu code ta calissin.

int a = 5;

textbox1 = a;


bu code ta.
int a=5;

textbox1.text = convert.tostring(a);



alttakinde yonlendirmeyi biz el ile yapiyoruz. usttekinide makine yapsin. simdi degisken herseyi icersine alabilir diyorsunuz. duzgun bir deger gelmeyince run time error versin?  :-\



Gökhan BEKEN

Özel mesaj okumuyorum, lütfen göndermeyin.

muhittin_kaplan

@Karamel bende vb60 ile başladığımda oh ne rahat ne yazarsam yazayım adam anlıyor  diyordum. Ama öyle değilmiş.
dili mümkün olan -insana en yakın- katı şekliyle kullanmak iyi programcılık örneğidir.

düşünsene vb de şu çalışır "dim a"
peki bu "a" hafızada ne kadar yer tutar?
yazdığın program ram de nekadar yer tutarsa o kadar yavaş çalışır.
programcı "dim a" yerine "dim a as integer" kullanmalı. byte kullanabileceği yerde integer kullanmamalı. (mümkün olan en küçük datatype kullanılmalı.)

Karamel

Hocam dedim ya. Suan icin yaptigim pc software lari kendi capimda oldugundan. Iyi software ile kotusunu suan icin farkedemiyorum  :-\

Bu arada bir sorum daha var.  Text box icinde bir rakam olsun. Mesela 255. Bunu tek byte a nasil ceviririm? Mesela byteimiz[0] = 0xFF;


muhittin_kaplan

decimal i byte mı yapmak istiyorsun ? (0-255 aralığındaki sayıyı)
https://support.microsoft.com/en-us/kb/109260

(vb.net de daha kolay. neden vb.net kullanmıyorsun, ve hatta c#)

Kabil ATICI

@Karamel
bunun için yeri geldiğinde kullandığım ve örneklerini gördüğüm;
dizi yöntemini kullanıyorum. Dizide 0..255 aralığında  tüm veri aralığını  0x00...0xFF olarak tanımlıyorum. Diziye bir veriyi adreslediğinde senin istediğin veri karşında..
ambar7