Hallo, Ich habe eine Variable von Datentype uint16_t, die wollte ich in hexadezimal umrechnen. wie kann ich das in c programmieren ? Gruß, Nader
Was meinst du mit "umrechnen"? Als Zahlenwert gibt es da nichts umzurechnen, einen Hex-String erzeugt dir (s)printf mit %x. Oliver
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 );
Hexadezimal ist (wie dezimal oder dual) nur eine Darstellung. Am Wert ändert sich nichts.
Beitrag #6991460 wurde vom Autor gelöscht.
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
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)
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.