Bytes

Go Programlama dilinde verilerin transferi sırasında bazı durumlarda karşımıza byte ifadeleri çıkmaktadır.

byte-and-bytes

Farklı program yapılarından veri transferi sırasında kodlar derlenerek binary yapıya çevrilir.

BINARY : Makinelerde elektrik sinyallerinin gelip gelmemesine bağlı olarak 1 veya 0 değerlerini alabilen iki tabanında gösterim sistemidir.

Binary yapıdaki veriler bitlerden oluşur ve bitler yan yana gelerek baytları oluştururlar.

Özellikle internet üzerinden veri sağlanırken veri paketlerinin binary olarak yollandığı ortamlarla sık karşılaşılmaktadır.

GO Dilinde Byte

GO dilinde byte ifadesi uint8 bir ifadedir. Yani 8bit'lik pozitif integer(tamsayı) ifadedir. Byte ifadesnini değer aralığı 0 ile 255 arasında olabilir.

byte

Görselde gördüğünüz üzere 170 sayısının bayt cinsinden yazımı 10101010 olacaktır. Sekiz adet 1 ve 0 değeri alabilen dijital haneden oluşur. En sağdan en sola doğru oluşabilecek ifadeler hesaplandığında her bir hane 2'nin bir kuvveti olacaktır.

unicode bir karakter 32bit karakter yapısında veriyi saklar yani 4 bayt bir değer ifade eder. Fakat, eğer ifademiz yalnızca 8bit yani 1 bayt ise yine de ifademizi bu şekilde fazladan 3 bayt ile mi göstermemiz gerekir? Misal, ASCII karakterler 1 bayt ile gösterilebilir.Tam da bu noktada GO dilinde byte ifadesi devreye girer.

String Ifadelerin Bayt Dilimleriyle Gösterimi

Teoriden pratiğe geçerek işimizi kolaylaştıralım :


func main() {

	s := "Merhaba programlama!"
	bs := []byte(s)

	// byte string ifadesini metin olarak görüntüle
	fmt.Printf("%s", bs)

	// byte ifadesini  deger olarak görüntüle
	fmt.Printf("%d", bs)

}

Bu ifadeyi go run ./main.go diyerek çalıştırdığımızda ekranımzda şu şekilde bir çıktı elde edeceğiz:

Merhaba programlama!
[77 101 114 104 97 98 97 32 112 114 111 103 114 97
 109 108 97 109 97 33]%

Her bir karakteri öncelikle 8bit değerlere çevirir. Bu değerlerin bir ve sıfır değerlerine göre yazımı sonucunda 0-255 arasında bir değer ataması yapar. Misal M harfi için 77 değeri ortaya çıkar. a harfi için ise 97 değeri atanır. space (Boşluk) için 32 değeri atanır. Her bir karaktere bir 8bit'lik yani 1bayt'lık değer ataması sağlanır.

non-ASCII Değerlerin Bayt Dilimleri Gösterimi

ASCII ifadeler haricinde kalan ifadelerin bayt cinsinden gösterimi ile ilgili bir örnek gerçekleştirelim:


func main() {
  bs := []byte("◺")

  fmt.Println(bs) // Output: [226 151 186]

  s := string(bs)
  fmt.Println(len(s)) // Output: 3
}

Bu ifadeyi ekrana bastırdığımızda aşağıdaki çıktıyı elde edeceğiz:

[226 151 186]
3

Burada dikkat etmemiz gereken ilk durum üçgen ifadesinin üç bayt bir ifade olarak gösterildiğidir. Yani 3 adet byte değeri ile gösterilir. Bunu da len(s) ifadesinin sonucunda görebilirsiniz.

Daha fazla bilgi için: