Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

C pointer sorusu

Başlatan kimlenbu, 18 Mart 2016, 14:47:03

kimlenbu

Selamlar,

8x8 karakterlerin tutulduğu bir lookup tablom var, program hafızasına yazılması için "const" olarak tanımladım, şu şekilde :

#include "graphic.h"

 const unsigned char font1[] ={
	 
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // <Space>
0x18,0x3C,0x3C,0x18,0x18,0x00,0x18,0x00, // !
0x66,0x66,0x24,0x00,0x00,0x00,0x00,0x00, // "
0x6C,0x6C,0xFE,0x6C,0xFE,0x6C,0x6C,0x00, // #
0x18,0x3E,0x60,0x3C,0x06,0x7C,0x18,0x00, // $
...
};


graphic.h dosyasının içeriğinde sadece main dosyasında kullabilmek için şu tanımlama var :

extern const unsigned char font1[];


istediğim karakterin ilgili byte'ına şu şekilde ulaşabiliyorum, örneğin a karakterinin istediğim byetına şu şekilde ulaşabilirken :

void KarakterTest(unsigned char *TestChar )
{
unsigned char istenenbyte=0;

   *(font1 + istenenbyte + (65)*8)
}


şu şekilde ulaşamıyorum

void KarakterTest(unsigned char *TestChar )
{
unsigned char istenenbyte=5;

   *(font1 + istenenbyte + (*TestChar)*8)
}


Belki saçma bir hata yapıyorum ama kafam yandı, kısır döngüye girdim. KarakterTest("abcde") şeklinde fonksiyonu çağırdığımda TestChar++ diyerek karakter arası dolaşırım, yukardaki şekilde de karakterlerin byteları arasında dolaşırım dedim ama olmuyor.

iyildirim

Font dizisi space-ascii 32 ile başlıyor.
İstediğiniz karaktere ulaşmak için ascii değerinden 32 çıkarmanız gerek.
Ulaştığınızı söylediğiniz  şekilde, direkt A-ascii65 ile  de çalışmaması gerek. Doğru değer okuyorsanız, bir şekilde birşeyler denk gelmiş.


kimlenbu

oh be teşekkürler,

*(font1+istenenbyte+*TestChar*8-32*8)

bu şekilde düzenleyince çalıştı.