Zugriff auf Hi-Byte eines Int über Pointer.

Gast #691515
Lesenswert?
• ▲
▼
Hallo, ich weis nicht wo mein Denkfehler liegt.
Mit folgender Funktion bin ich wunschlos glücklich, sie liefert mir das 
Hi-Byte eines Integers zurück.
1
unsigned char gethibyte(unsigned int * integer)
2
{
3
    unsigned char * ptr;
4
    ptr=(unsigned char*)&integer;
5
    ptr++;
6
    return *ptr;
7
}

Jetzt wollte ich in ähnlicher Weise das Highbyte verändern und dachte 
dasfolgende kleine Änderung hilfreich sein wird..
1
void puthibyte(unsigned int *integer, unsigned char Value)
2
{
3
    unsigned char * ptr;
4
    ptr=(unsigned char*)&integer;
5
    ptr++;
6
    *ptr=Value;
7
}

Leider funktioniert das so nicht. Ich frage mich aber warum? In der 
oberen Fkt. gebe ich den Wert auf den der Pointer zeigt zurück und in 
der unteren möchte ich gerne einfach den Wert verändern. Jedoch 
verändert sich bei mir nix.


Weis jemand rat?

Benutzte MPLAB IDE 7.51 + C18 Compiler mit PIC 18F2550

Vielen Dank
#691521
Lesenswert?
• ▲
▼
FFJaro wrote:

>
1
void puthibyte(unsigned int *integer, unsigned char Value)
2
> {
3
>     unsigned char * ptr;
4
>     ptr=(unsigned char*)&integer;
5
>     ptr++;
6
>     *ptr=Value;
7
> }
>
> Leider funktioniert das so nicht.

Der Code ist in Ordnung, sofern die Reihenfolge im Speicher
zuerst Low-Byte und dann High-Byte lautet. Aber das hast
du wohl schon im Vorfeld abgeklärt.

Dein Fehler muss also woanders liegen.
Persönliche Seite #691535
Lesenswert?
• ▲
▼
Es ist Zufall, dass deine Lösung funktioniert. Du machst nämlich 
implizit Annahmen wie die Bytes im Speicher abgelegt sind und das ist 
nicht auf allen Maschinen gleich. Stichwort Endianess

http://www.mikrocontroller.net/articles/Digitaltechnik#Endianness

Portabler wäre etwas in der Art...
1
unsigned char gethibyte(unsigned int *integer)
2
{
3
    return *integer >> 8;
4
}
1
void puthibyte(unsigned int *integer, unsigned char Value)
2
{
3
    *integer = ((unsigned int)Value << 8) | (*integer & 0x00FF);
4
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.