Jan H. schrieb:> uint16_t _size;> uint8_t _width;> uint8_t _height;> uint8_t _firstChar;> uint8_t _charCount;>> uint8_t _widths[11];
Aber hier hast du doch schon gerechnet.
X = die größe gesamten Arrays
y = sizeof(_width)+sizeof(_height)+....+sizeof(-widths)
dann (X-Y) / sizeof(uint8_t)
Vielleich so?
> ist es möglich, ohne das ich jetzt die ganzen Bytes zählen muss, die> Größe von dem Array zu bestimmen beim übersetzen?
Natürlich. Und man kann Quellcode sogar anhängen.
HF
g457 schrieb:>> ist es möglich, ohne das ich jetzt die ganzen Bytes zählen muss, die>> Größe von dem Array zu bestimmen beim übersetzen?>> Natürlich. Und man kann Quellcode sogar anhängen.>> HF
Auch mit Union?
Wenn Dein Compiler nicht allzu sehr am Alignment herumfummelt, sollte
eine Konstante, direkt hinter "fontData" gehen.
Du subtrahierst dann einfach die Adresse von fontData von der der
Hilfskonstanten hast Du den Salat. Natürlich nur zur Laufzeit.
Ich glaube aber nicht, dass Du mit Deinem Ansatz glücklich werden wirst,
da Du ja kein homogenes Array produzierst.
Die 0 hat 48 Bytes;
die 1 macht Kurzarbeit; und
die 4 sogar Überstunden; für
den Doppelpunkt lohnt es sich kaum aufzustehen.
Um auf die Punktmuster zugreifen zu können, musst Du sowieso irgendwo
die "Anfänge" der einzelnen Punktmuster (als Konstante) ablegen. Zu
diesen Konstanten noch die Länge des Doppelpunktes hinzuzurechnen sollte
aber machbar sein.
Übrigens: Sollten die Konstanten "char widhts" irgendwie mit der
Blockgröße zusammenhängen, so definiere sie doch einfach mittels
"define". Dann kann der Compiler sie addieren und Du brauchst nur noch
die Länge des Doppelpunktes im Auge behalten.
Eine Möglichkeit ist ein Codegenerator, der die Zusatzdaten /
Informationen konsistent erzeugt, was aber extra Programm für den PC
erfordert.
Oder indem man die Größe direkt aus den Daten bestimmt — nicht
sonderlich schön — nach dem Muster:
1
#define DATA 1, 2, 3,
2
3
typedefstruct
4
{
5
intdata[sizeof((int[]){DATA})];
6
}font_t;
7
8
constfont_tfont=
9
{
10
.data={DATA}
11
};
Man könnte die Daten aus DATA auch in eine Datei auslagern und includen
wo gebraucht; auch nicht wirklich hipp:
1
typedefstruct
2
{
3
intdata[sizeof((int[])
4
{
5
#include"data.def"
6
})];
7
}font_t;
8
9
constfont_tfont=
10
{
11
.data=
12
{
13
#include"data.def"
14
}};
g457 schrieb:>> ist es möglich, ohne das ich jetzt die ganzen Bytes zählen muss, die>> Größe von dem Array zu bestimmen beim übersetzen?>> Natürlich. Und man kann Quellcode sogar anhängen.> const uint8_t* pFontData;
Was aber eine andere Datenstruktur ist; ein Zeiger ist kein Array.