Mit etwas Bit-Manipulation durchaus möglich, aber der genaue Code hängt von der byte order der Plattform ab. Unter der Annahme, Little-Endian (das ist die häufigste ist), könnten Sie tun:
unsigned int JoinBits(unsigned short x, unsigned short y) {
// x := AB-CD
// y := ab-cd
char bytes[4];
/* Dd */ bytes[0] = ((x & 0x000F) << 4) | (y & 0x000F);
/* Cc */ bytes[1] = (x & 0x00F0) | ((y & 0x00F0) >> 4);
/* Bb */ bytes[2] = ((x & 0x0F00) >> 4) | ((y & 0x0F00) >> 8);
/* Aa */ bytes[3] = ((x & 0xF000) >> 8) | ((y & 0xF000) >> 12);
return *reinterpret_cast<unsigned int *>(bytes);
}
Ist dies eine Hausaufgabe ? Was hast du bisher versucht? – chrisaycock
Verschieben eines der 16 Bit Werte nach oben. Sie müssen Ihren Prozessor Endianness kennen – kenny
@kenny: Ich glaube nicht, dass Endianess ins Spiel kommt, da er Bitmuster aus beliebigem Speicher nicht interpretieren muss. – Lars