Forum: PC-Programmierung uint16_t in Hex umrechnen


von Nader A. (Firma: Hochschule Karlsruhe - Technik) (nader95)


Lesenswert?

Hallo,

Ich habe eine Variable von Datentype uint16_t, die wollte ich in 
hexadezimal umrechnen. wie kann ich das in c programmieren ?

Gruß, Nader

von Oliver S. (oliverso)


Lesenswert?

Was meinst du mit "umrechnen"? Als Zahlenwert gibt es da nichts 
umzurechnen, einen Hex-String erzeugt dir (s)printf mit %x.

Oliver

von Andreas B. (bitverdreher)


Lesenswert?

Falls es um die String Ausgabe von Hex mit einem AVR ueber die serielle 
geht:

const unsigned char HEX[] PROGMEM = {"0123456789ABCDEF"};

void Printc(char c) {
   while(!(UCSR0A & (1 << UDRE0)));
   UDR0 = c;
}
.....
  unsigned char bl = pgm_read_byte(&HEX[val & 0x0F]);
  unsigned char bh = pgm_read_byte(&HEX[val >> 4]);
  Printc( bh );
  Printc( bl );

von Dirk B. (dirkb2)


Lesenswert?

Hexadezimal ist (wie dezimal oder dual) nur eine Darstellung.
Am Wert ändert sich nichts.

Beitrag #6991460 wurde vom Autor gelöscht.
von Nader A. (Firma: Hochschule Karlsruhe - Technik) (nader95)


Lesenswert?

Oliver S. schrieb:
> Was meinst du mit "umrechnen"? Als Zahlenwert gibt es da nichts
> umzurechnen, einen Hex-String erzeugt dir (s)printf mit %x.
>
> Oliver


Die Situation :

Ich habe einen Sensorwert (uint16_t). Ich will den Wert in einem Message
Buffer von einem CAN-Modul schreiben, damit ich den Wert über CAN Bus
übertragen kann. Diese generierte Sensordaten müssen in Hexadezimal
umgewandelt werden, damit sie in den Message Buffer eingebunden werden
können.

Gruß, Nader

von A. S. (Gast)


Lesenswert?

Nader A. schrieb im Beitrag #6991460:
> Diese generierte Sensordaten müssen in Hexadezimal umgewandelt werden,
> damit sie in den Message Buffer eingebunden werden können.

Wenn der Wert 0 ist, welche Bytes (und wie viele) sollen in den Puffer 
geschrieben werden.

Wenn Du dir darüber klar bist, das gleiche für den Wert 30. Falls nicht, 
Code oder Doku des CAN-Moduls (nicht HW sondern deren SW)

von Nader A. (Firma: Hochschule Karlsruhe - Technik) (nader95)


Lesenswert?

A. S. schrieb:
> Nader A. schrieb im Beitrag #6991460:
>> Diese generierte Sensordaten müssen in Hexadezimal umgewandelt werden,
>> damit sie in den Message Buffer eingebunden werden können.
>
> Wenn der Wert 0 ist, welche Bytes (und wie viele) sollen in den Puffer
> geschrieben werden.
>
> Wenn Du dir darüber klar bist, das gleiche für den Wert 30. Falls nicht,
> Code oder Doku des CAN-Moduls (nicht HW sondern deren SW)

Insgesamt habe ich 4 Sensoren. In einer CAN-Nachricht kann man 8 Bytes 
Nutzdaten übertragen. Jeder Sensorwert hat zwei Bytes. Immer zwei Bytes 
für jeden Sensorwert werden in den Message Buffer geschrieben.

von A. S. (Gast)


Lesenswert?

Nader A. schrieb:
> A. S. schrieb:
>
>> Nader A. schrieb im Beitrag #6991460:
>>> Diese generierte Sensordaten müssen in Hexadezimal umgewandelt werden,
>>> damit sie in den Message Buffer eingebunden werden können.
>>
>> Wenn der Wert 0 ist, welche Bytes (und wie viele) sollen in den Puffer
>> geschrieben werden.
>> Wenn Du dir darüber klar bist, das gleiche für den Wert 30. Falls nicht,
>> Code oder Doku des CAN-Moduls (nicht HW sondern deren SW)
>
> Insgesamt habe ich 4 Sensoren. In einer CAN-Nachricht kann man 8 Bytes
> Nutzdaten übertragen. Jeder Sensorwert hat zwei Bytes. Immer zwei Bytes
> für jeden Sensorwert werden in den Message Buffer geschrieben.

Du bekommst 2 Byte und sendest 2 Byte ... Das einfachste wäre, das 
gleiche Datenformat zu nehmen. Dann kannst Du die Bytes kopieren.

Wenn das nicht geht, musst Du uns sagen, wie die Datenformate sind. Hex 
hat dabei viele oder keine Bedeutung.

von Dirk B. (dirkb2)


Lesenswert?

Nader A. schrieb:
> Immer zwei Bytes
> für jeden Sensorwert werden in den Message Buffer geschrieben.

Da ein uint16_t schon 2 Byte hat, wird das einfach eine Kopie sein.
(EIN Byte in Hex-Darstelllung braucht schon zwei Zeichen)

Das HEX in der Doku ist demnach nur zur Darstellung für den Leser 
(Menschen) gemacht.

von Oliver S. (oliverso)


Lesenswert?

Nader A. schrieb:
> Diese generierte Sensordaten müssen in Hexadezimal
> umgewandelt werden, damit sie in den Message Buffer eingebunden werden
> können.

Was für Datentypen erwartet denn der Messagebuffer?

Oliver

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.