Mehrzeilige Arrays Länge bestimmen

Hallo,

ich bastel gerade an einem Matrix betriebenen Wecker. Das Grundgerüst steht und funktioniert bereits.
Nun stellt sich eine Frage, ich habe eine font, die 8x8 ist. Gerade hier sind die Zahlen aber nicht über eine Fläche von 8x8 verfügbar. In der Regel fehlt die untere Reihe (kein Problem), sowie 1 oder 2 Spalten.
Um die Spalten geht es, kann ich irgendwo bestimmen, wieviele Werte sich in dem Array befinden?

Meine erste Überlegung war, die Start und End Werte zu errechnen wie folgt,
Setzte Startpunkt bei der ersten Spalte > 0x00 und setzte Endpunkt bei der letzten Spalte > 0x00.
Gibt es da noch andere Ansätze, die vielleicht auch effektvieren wären.

{0x7C,0xFE,0x9A,0xB2,0xFE,0x7C,0x00,0x00},	// 0x30
	{0x42,0x42,0xFE,0xFE,0x02,0x02,0x00,0x00},	// 0x31
	{0x46,0xCE,0x9A,0x92,0xF6,0x66,0x00,0x00},	// 0x32
	{0x44,0xC6,0x92,0x92,0xFE,0x6C,0x00,0x00},	// 0x33
	{0x18,0x38,0x68,0xC8,0xFE,0xFE,0x08,0x00},	// 0x34
	{0xE4,0xE6,0xA2,0xA2,0xBE,0x9C,0x00,0x00},	// 0x35
	{0x3C,0x7E,0xD2,0x92,0x9E,0x0C,0x00,0x00},	// 0x36
	{0xC0,0xC6,0x8E,0x98,0xF0,0xE0,0x00,0x00},	// 0x37
	{0x6C,0xFE,0x92,0x92,0xFE,0x6C,0x00,0x00},	// 0x38
	{0x60,0xF2,0x92,0x96,0xFC,0x78,0x00,0x00},	// 0x39

Zwei-dimensionale Arrays sind auch nicht viel anders als ein-dimensionale. Das ist ein Zusammenhängender Speicherbereich. Der Compiler gaukelt dir lediglich mit Zeiger-Arithmetik vor dass das mehr ist. Deshalb geht da genauso sizeof(array) / sizeof(datentyp) um die die Anzahl der Elemente zu bestimmen

Hab ein paar Zeichen dabei, die auch zu Beginn 0x00 haben. Hab es nun mal so auf die schnelle lösen können. Ich würde nämlich gerne aus einer fixen Schriftbreite eine flexible machen.

[...]
	{0x00,0x00,0x06,0x06,0x00,0x00,0x00,0x00},	// 0x2E '.'
[...]
int8_t max7219_get_font_width(uint8_t *x1, uint8_t *x2, char c)
{
	uint8_t a = 0;
	uint8_t width = 8;
	
	*x1 = 0;
	*x2 = width;
	
	for(int i = 0; i < width; i++)
	{
		uint8_t value = pgm_read_byte(&font_bold[c][i]);
		if(value != 0x00) a = 1;
		else
		{
			if(!a) *x1 +=1;
			else *x2 -= 1;
		}
	}
}

void max7219_puts(char *s)
{
	char c = '.';

	uint8_t x1 = 0;
	uint8_t x2 = 0;

	max7219_get_font_width(&x1, &x2, c);
	max7219_putc_offset(0, 0, 8, x1+'0');
	max7219_putc_offset(8, 0, 8, x2+'0');
}