Endorfin35+
Kayıtsız Üye
- Katılım
- 1 Mayıs 2020
- Mesajlar
- 4,473
Kendim için tek tek deneyerek kılavuz niteliğinde bir doysa hazırladım. Benim gibi acemilere faydalı olacaktır...
Kod:
# python değişkenler
# örnek karakter "A" ascii kodu 65 hex değeri 0x41
# örnek karakter "a" ascii kodu 97 hex değeri 0x61
# python kaynak : https://docs.python.org/3/library/functions.html
# Tüm veri tipleri için kaynak : https://www.w3schools.com/python/python_datatypes.asp
# Endcoing için kaynak : https://python-istihza.yazbel.com/karakter_kodlama.html
# Binary için kaynak : https://www.devdungeon.com/content/working-binary-data-python
# boolean türü ver dönüşümleri. boolean türü otomatik olarak atanır.
bool_var_1 = False # True, False değerleri alır...
bool_var_2 = bool(1) # Sonuc 1 e karşılık "True" olur
bool_var_3 = bool(0) # Sonuc 0 a karşılık "False" olur
print(type(bool_var_1)) # Değişken türünü tespit eder.
# float türü ver dönüşümleri. Float türü otomatik olarak atanır.
float_var_1 = 34.51542 # sonuc 34.51542
float_var_2 = round(34.41542 , 2) # sonuc 34.42 yuvarlama yapılır.
float_var_3 = float("34") # Sonuc 34.0
float_var_4 = float("34.5") # sonuc 34.5
print(format(float_var_4,".3F")) # 34.5 değerini 34.500 olarak görüntüler.
print(format(float_var_1,".2F")) # 34.51542 değerini 34.52 olarak görüntüler. Gerçek değer değişmez.
# int türü ve dönüşümleri. int türü otomatik olarak atanır.
int_var_1 = 1234 #
int_var_2 = round(34.51542) # sonuc 35 tir
int_var_3 = ord("A") # Sonuc "A" ascii kodu 65 tir. Tek karakter çevirir.
int_var_4 = int("65") # Sonuc "65" karşılığı desimal (sayısal) 65 tir.
int_var_5 = 0x41 # Sonuc 0x41 desimal karışılığı 65 tir. herhangi bir değeri çevirir.
int_var_6 = int("41",16) # "41" 16 tabanına göre rakam dönüştürülmüştür. Sonuc 65 tir herhangi bir değeri çevirir.
int_var_7 = int("01000001",2) # Sonuc 01000001 desimal karışılığı 65 tir. herhangi bir değeri çevirir.
int_var_8 = 0b01000001 # Sonuc 01000001 desimal karışılığı 65 tir.
int_var_9 = 0b0100000101001110 # Sonuc 0100000101001110 desimal karışılığı 16718 tir
int_var_10 = int.from_bytes(b'A',byteorder="big") # sonuc A ascii karşılığı 65 olur binary: 01000001
int_var_11 = int.from_bytes(b'A',byteorder="big") # sonuc A ascii karşılığı 65 olur binary: 01000001
int_var_12 = int.from_bytes(b'AN',byteorder="big") # sonuc 16718 olur. A:0100 0001 N:0100 1110 ise 0100 0001 0100 1110 = 16718
int_var_13 = int.from_bytes(b'AN',byteorder="little") # sonuc 20033 olur. NA şeklinde sıralanır. 0100 1110 0100 0001 = 20033
# str türü ve dönüşümleri. str türü otomatik olarak atanır.
str_var_1 = "abcd"
str_var_2 = "abcd".upper() # Sonuc "ABCD" büyük harfe dönüşüm sağlanır.
str_var_3 = "AbcD".lower() # Sonuc "abcd" küçük harfe dönüşüm sağlanır
str_var_4 = "deNEMe".capitalize() # sonuc "Deneme" ilk harf büyük diğerleri küçük olur.
str_var_5 = str("0x41") # sonuc karakter olarak "0x41" dir.
str_var_6 = str("0x41").lstrip("0x") # sonuc karakter olarak "41" dir. Maske uygun ise çıkartılır
str_var_7 = str("0x41").rstrip("41") # sonuc karakter olarak "0x" dir. Maske uygun ise çıkartılır
str_var_8 = str("0x41")[0:2] # sonuc karakter olarak "0x" dir. Aralığı alır.
str_var_9 = str("0x41")[1:3] # sonuc karakter olarak "x4" dir. Aralığı alır.
str_var_10 = str("0x41")[2:4] # sonuc karakter olarak "41" dir. Aralığı alır.
str_var_11 = str("0x41")[:2] # sonuc karakter olarak "0x" dir. Soldan 2 karakter alır.
str_var_12 = str("0x41")[2:] # sonuc karakter olarak "41" dir. Sağdan 2 karakter alır.
str_var_13 = str(1234) # 1234 karakter olarak "1234" e dönüşür.
str_var_14 = chr(65) # Sonuc 65 ascii koduna karşılık "A" dır.
str_var_15 = chr(0x41) # Sonuc 0x41 hex (ascii) koduna karşılık "A" dır.
str_val_16 = chr(0b01000001) # Sonuc 01000001 binary (ascii) koduna karşılık "A" dır.
# bytes türü ve dönüşümleri. bytes türü otomatik olarak atanır.
# bytes türü byte lardan oluşan dizi gibidir. herhangi bir elamana ulaşabilir ama değiştirmezsiniz.
bytes_val_1 = b'A' # Sonuç b'A' dır. A bir bayt olarak saklanır. 0100 0001
bytes_val_2 = b'\x41' # Sonuç b'A' dır. A bir bayt olarak saklanır. 0100 0001
bytes_val_3 = b'\x05' # Sonuç b'\05' tir. karakter karşılığı olmadığında hex gösterilir.
bytes_val_4 = b'5' # Sonuç b'5' tir. 5 bir bayt olarak saklanır. 0000 0101
bytes_val_5 = bytes([65]) # Sonuç b'A' dır. A bir bayt olarak saklanır. 0100 0001
bytes_val_6 = bytes([65,97]) # Sonuç b'Aa' dır. iki bayt olarak saklanır.
bytes_val_7 = bytes(3) # Sonuç b'\x00\x00\x00' dır. 3 baytlık boş veri oluşturulur.
#bytearray türü bytes türü gibidir. Ancak dizi özelliklerini taşır.
bytearray_val_1 = bytearray(b'\x00\x0F') # Sonuç b'\x00\x0f' dır.
bytearray_val_2 = bytearray([65,97]) # Sonuç b'Aa' dır.
bytearray_val_2[1]=0 # Sonuç b'A\x00' olmuştur.
print(chr(bytearray_val_2[0])) #sonuc A olarak görüntülenir,
print(bin(bytearray_val_2[0])) #sonuc 0b1000001 olarak görüntülenir,
print(hex(bytearray_val_2[0])) #sonuc 0x41 olarak görüntülenir,
print(bytearray_val_2[0]) #sonuc 65 olarak görüntülenir,
print((bytearray_val_2).hex()) # Sonuç 4100 dır. önceden b'A\x00' idi...
# Soldaki 0 ların görüntülenmesi
print(bin(bytearray_val_2[0]).lstrip("0b").zfill(8)) #sonuc 01000001 olarak görüntülenir,
print()
# bit manipulasyonları int türü üzerinden yapılır.
# Ornek : 30000 rakamının hi-byte ve low-byte olarak parçaya ayrılması ve tekrar bir araya getirilmesi.
print("hi-low byte...")
# int olarak bir değişkende 30000 turulur.
bit16_val_1 = 30000
print(bin(bit16_val_1)) # 0111 0101 0011 0000 değerine sahiptir.
low_byte = bit16_val_1 & 0xFF # & 0000 0000 1111 1111 ile and işlemi
print(bin(low_byte)) # 0000 0000 0011 0000 sonuç 0b110000 olur.
hi_byte = bit16_val_1 >> 8 #>8 0111 0101 0011 0000 değerine sağa 8 bit kaydırılır
print(bin(hi_byte)) # 0000 0000 0111 0101 sonuç 0b1110101 olur
# tekrar bir ayara getime
# kısa yazılış (hi_byte << 8) | low_byte
bit16_val_2 = hi_byte << 8 #<8 0111 0101
print(bin(bit16_val_2)) # 0111 0101 0000 0000 elde edilir.
bit16_val_2 = bit16_val_2 | (low_byte) # | 0000 0000 0011 0000 low ile OR işlemine sokulur.
print(bin(bit16_val_2)) # 0111 0101 0011 0000
print()
print("bit maskeleme...")
# Bilinmeyen binary bir değerin sacede arzu edilen kısmına müdahale etmeyi sağlar.
# Örnek 1 : bilinen veya bilinmeyen bir bit değerinin 2. biti 1 olsun isteniyor.
# 1011 0011 referans değer olsun.
bit_val_1 = 0b10110011 # 1011 0011 ref. değer
bit_mask = 1<<2 # | 0000 0100 2. biti 1 olan maskemiz. 1 i iki defa sola kaydırak elde ettik.
bit_val_2 = bit_val_1 | bit_mask # 1011 0111 elde edilir. istendiği gibi 2. bit 1 oldu.
# Örnek 2 : bilinen veya bilinmeyen bir bit değerinin 1. biti 0 olsun isteniyor.
# 1011 0011 referans değer olsun.
bit_val_1 = 0b10110011 # 1011 0011 ref. değer (kaç bit olduğu bilinmeli...)
bit_mask = ~(0b1<<1) & 0xFF # & 1111 1101 1. biti 0 olan maskemiz. 1 i 1 defa sola kaydırdık 8bit için ff ile maskeledik.
bit_val_2 = bit_val_1 & bit_mask # 1011 0001 elde edilir. istendiği gibi 1. bit 0 oldu.
# Örnek 3 : bilinen veya bilinmeyen bir bit değerinin 5. biti 0 ise 1, 1 ise 0 olsun isteniyor.
# 1011 0011 referans değer olsun.
bit_val_1 = 0b10110011 # 1011 0011 ref. değer
bit_mask = 1<<5 # ^ 0010 0000 5. biti 1 olan maskemiz. 1 i 5 defa sola kaydırdık
bit_val_2 = bit_val_1 ^ bit_mask # 1001 0011 elde edilir. istendiği gibi 5. bit 1 iken 0 oldu.
# Örnek 4 : bilinen veya bilinmeyen bir bit değerinin 4. bitinin ne olduğu tespit edilmek isteniyor.
# 1011 0011 referans değer olsun.
bit_val_1 = 0b10110011 # 1011 0011 ref. değer
bit_val_2 = bit_val_1 >>4 #>4 0000 1011 istenen bit başa getirilir.
bit_mask = 1 #& 0000 0001 0. biti 1 olan maske ayarlanır.
bit_val_3 = bit_val_2 & bit_mask # 000 0001 elde edilir. istendiği gibi 4. bitin değeri 1 olarak tespit edilir.