wie kann ich nun aus dem binären Wert ein Septets Wert machen. Gerne auch mit einen einzelnen Wert auch wenn es im Sinn des Projektes, "man braucht" mindestens ja 2 Werte um aus Binär Septets zu machen, das richtig auszuführen ist.
Kurzer Hintergrund zur Funktion von Computern(und auch deinen AVRs):
Ein Computer behandelt alles als Zahlen, auch ein Buchstabe ist nur eine Zahl, die einer Zuordnung gehorcht.
Intern ist eine Zahl immer Binär, für die ALU(Arithmetric Logic Unit) gibt es keine Dezimalen Zahlen, oder Hexadezimal, alles ist binär.
Das wir als "Nutzer" oder Programmierer einen Unterschied zwischen Binär/Dezimal/Hexadezimal machen, liegt nur daran, dass man das so einfacher verstehen kann.
Intern arbeiten alle Modernen Computer mit binären Zahlen die ein vielfaches von 8 stellen haben. Selbst wenn du nur 1 oder 0 speichern willst, musst du eine Variable mit 8-Bit(1 Byte) anlegen, da gibt es keinen unterschied zwischen AVR oder x86.
Früher gab es mal Computer mit unterschiedlichen Bitbreiten, 7, 11, was auch immer, das hat man aber für einfacherer Handhabung sein gelassen. Es ist aber auch möglich UART-Wörter mit 7-Bit zu übertragen, daher wrsl auch diese dämliche Umrechnung mit 7-Bit.
Wenn du nun auf deinem System einen Septet machen willst, kannst du dieses nicht als Septet speichern, es gibt keine Variable mit 7 Bit. Minimum ist 8. Wenn du dir mal die ASCII-Tabelle anschaust wirst du ab 128(was die 7-Bit Grenze darstellt) nur noch Sonderzeichen finden, was den Grund hat, dass man früher Texte immer mit 7-Bit übertragen hat.
Wenn du nun aus einem Zeichen ein Septet erstellen willst verwirfst du ein Bit, was sowieso 0 war um das dann in eine 8-Bit breite Variable zu schreiben => Sinnbefreit.
Die Umwandlung zu den Septets macht nur dann sinn, wenn du einen Text übertragen willst.
wie kann ich im direkten schritt aus einem H den Wert 01001000, aktuell wie oben im Code mache ich ja 2 Schritte. In meinen Büchern lese ich immer nur von 2 Schritten.
Ich weiß nicht, was du als "zwei Schritte" bezeichnest, die einfachste Möglichkeit eine zahl binär darzustellen ist:
Code: Alles auswählen
for(int i = 7; i >= 0; i--)
{
printf("%d", ('H' & (1 << i))?(1):(0));
}
Was hier gemacht wird, ist jede Stelle mit 1 binär UND zu verknüpfen, ist die Stelle 1 kommt ein Ergebnis > 0 heraus, was in C auch logisch Wahr ergibt, oder 0 was eben logisch falsch ist. Danach wird entweder eine 1 oder eine 0 ausgegeben. Das herunterzählen dient dazu, dass man mit dem MSB zuerst anfängt.
Redundanz macht wiederholen unnötig.
quod erat expectandum