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.
#2822391
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 #2822475
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

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