Daten shiften und umwandeln

Gast #2822369
Lesenswert?
• ▲
▼
Hallo, brauche dringend Hilfe bei c Programmierung.
Ich will eine festgelegte Zahl erstmal einmal nach rechts shiften. da 
habe ich auch hinbekommen:
1
unsigned char Address_B= 0x76;
2
unsigned int shift = 1;
3

4
Adr_B= Address_B >> shift; //Adr_B = 0x3B
dann will ich diese Addresse erweitern, die soll dann auf eine neue 
Addresse in das low byte gesetzt werden und in das High byte soll z.B. 
0x02 rein,  also sieht die variable dann so aus: neue_Addresse = 0x023B. 
ich weuß nur nicht wie ich es hinbekomme, habs mit Speicherallokation 
probiert aber ist irgendwie heikel.

zum Hintergrund: die Address_A soll einmal nach rechts geshiftet werden, 
damit eine neue Addresse ensteht, da ich nur 7 bit benötige und dann 
soll auf der Adresse nochmal 3 Stellen dazu kommen, die als 
Selectregister dienen sollen, damit ich in meinem code auf bestimmte 
routinen zugreifen kann.
1
unsigned short *Adr_B;
2
Adr_B  = malloc(10*sizeof(*Adr_B));
3
unsigned short *Bank_Addr_B;
4
Bank_Addr_B = malloc(16*sizeof(*Bank_Addr_B));
5
unsigned char *Bank_S_B = 0x02;
6
Bank_S_B  = malloc(10*sizeof(*Bank_S_B));
7

8
  for (j=0;j < 10;j++){
9

10
      if(j < 7){
11
        Bank_Addr_B[j] =  &Adr_B[j];//die ersten 7 stellen von Adr_B werden ins Bank_Addr_B geladen
12
      }
13
        else{
14
        Bank_Addr_B[j] =  &Bank_S_B[j-7];// dann werden hier die nächsten 3 Stellen für das Selectregister geladen
15
      }
16

17
    }
Hab nicht soviel Ahnung von C Programmierung bin aber dabei mich zu 
erweitern.
Lesenswert?
• ▲
▼
Olli schrieb:
> Ich will eine festgelegte Zahl erstmal einmal nach rechts shiften.
> dann will ich diese Addresse erweitern, die soll dann auf eine neue
> Addresse in das low byte gesetzt werden und in das High byte soll z.B.
> 0x02 rein,  also sieht die variable dann so aus: neue_Addresse = 0x023B.

1
uint16_t neue_Addresse = (0x02 << 8) | (Address_B >> 1);
Moderator (Firma: Titel) Persönliche Seite
Lesenswert?
• ▲
▼
Stefan Ernst schrieb:
> Du hast das irgendwie missverstanden.
Ich wollte es gar nicht verstehen...

Aber wenn ich das eigentlich Problem so lese:
Olli schrieb:
> dann will ich diese Addresse erweitern, die soll dann auf eine neue
> Addresse in das low byte gesetzt werden und in das High byte soll z.B.
> 0x02 rein,  also sieht die variable dann so aus: neue_Addresse = 0x023B.
Dann wäre ich auf das gekommen:
uint16_t neue_Addresse = 0x0200 | (Address_B >> 1);

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.