8 Bit in 16 Bit wandeln

OP #914210
Lesenswert?

Hallo,

ich habe eine 8x5 Bit Schrift.
Diese möchte ich gerne als 16x10 Schrift darstellen.

Wie kann man denn wohl aus 8 Bit eine "doppelte" 16 Bit Variable machen?

Beispiel:

8Bit : 1010 1010
soll das werden:
16Bit : 1100 1100 1100 1100

Vielend Dank für eure Hilfe.

Gruß Toby
Gast #914222
Lesenswert?

in welcher sprache denn? für c hätte ich das hier anzubieten:

unsigned short verbreitern(unsigned char schmal)
{
   unsigned short breit=0;
   for(unsigned char i=0;i<8;i++)
   {
      if(schmal & (1<<i))
      {
         breit |= (1<<i);
         breit |= (1<<i+1);
      }
   }
   return breit;
}

alles andre als elegant, aber tut.
#914238
Lesenswert?

@ Michael H* (-holli-)

>alles andre als elegant, aber tut.

Aua. Variable shifts! Wenn dann eher so.
1
unsigned short verbreitern(unsigned char schmal)
2
{
3
   uint16_t tmp=3, breit=0;
4
   uint8_t cnt;
5

6
   for(cnt=0; cnt<8; cnt++)
7
   {
8
      if(schmal & 1)
9
         breit |= tmp;
10
      schmal >>=1;
11
      tmp <<=2;
12
   }
13
   return breit;
14
}

Das sollte deutlich schneller sein.

MFG
Falk
Gast #914255
Lesenswert?

oder falls es schnell gehen soll:

unsigned short makeBig(unsigned char small)
{
  unsigned char big[2];
  static unsigned char table[] =
  {
    0x00,0x03,0x0C,0x0F,
    0x30,0x33,0x3C,0x3F,
    0xC0,0xC3,0xCC,0xCF,
    0xF0,0xF3,0xFC,0xFF,
  }

  big[0] = table[small & 15];
  big[1] = table[small >> 4];

  return *(unsigned short*) big;
}


(nicht getestet, deshalb ausprobieren!)

Gruss

Jörg

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren