Ich habe ein Zeichen ohne Vorzeichen mit 6 Bytes lang. Der Wert innerhalb des char gespeichert ist:Grabbit 1 und 6, und 2 bis 5 in einem unsigned Char in C
Hex: 53167DFD95B7
Binary: 010100 110001 011001 111101 111111 011001 010110 110111
Was ich tun muss, ist Capture-Bit 1 und Bit 6. Dann, dass in eine Dezimalzahl umwandeln. Dann erfassen Sie Bit 2-5 und konvertieren Sie das in Dezimal Zum Beispiel ist Bit 1 hier 0, Bit 6 ist 0, also binär 00, ist dezimal 0. Dann für Bit 2-5, binär 1010 oder dezimal 10. Dann bewegen zur nächsten Gruppe von 6 Bits.
Bit 1 = 1, Bit 6 gleich 1 ist, so binär 11 oder dezimal 3 Bit 2-5 ist binär 1000 oder dezimal 8
Bit 1 = 0, Bit 6 = 1, 01 so binäre oder dezimal 1 Bit 2-5 ist binär 1100 oder dezimal 12
Und so weiter für die verbleibenden Gruppen von 6 Bits.
Ich bin nicht wirklich sicher, wie ich maskieren sollte, Verschiebung dafür. Da dies nur 6 Bits gleichzeitig sind, habe ich einige Schwierigkeiten. Jede Hilfe mit diesem würde sehr geschätzt werden! Vielen Dank im Voraus.
EDIT
int getBitVal(unsigned char *keyStrBin, int keyIndex) {
int keyMod = keyIndex % 8;
int keyIn = keyIndex/8;
return (((keyStrBin[keyIn]) >> (7 - (keyMod))) & 1);
}
void getSValueMajor(char **tableS, unsigned char *f, unsigned char *sValue) {
int i, bitOne, bitSix;
int sCol;
for (i = 0; i < 8; i++) {
bitOne = getBitVal(f, 0);
bitSix = getBitVal(f, 5);
// Do something here to get only bits 2-5. Doesn't matter if its decimal. Just need the 4 bits.
}
}
Ill Verschiebung um 6 Bits I am Ende der Schleife erraten auf die nächsten 6 Bits zu gehen, aber nicht sicher, wie diese 4 Bits in eine Variable zu lesen.
Verwandte abrollen können: http://stackoverflow.com/questions/47981/how-do-you-set-clear-and-toggle-a-single-bit-in-cc?rq=1 –
Dies hat den Duft eines DES-Algorithmus. – WhozCraig
In der Tat. Es ist für ein Schulprojekt. – TyrantUT