Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Hex zu dezimal, einmal anders...

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
04.10.2004, 08:35 Uhr
Mr. T



Hello again!

Ich bräuchte eine Idee, wie ich aus einem char [x] - Feld, in dem ASCII zeichen stehen, den dazugehörigen Hexwert in dezimal auslesen könnzte. Das wäre jetzt ja zu einfach, wenn nicht:

im Feld[0] z.B.: 0xFF sthen würde und im Feld[1] dann 0xFE und die Zahl aber zusammen gehört - zu 0xFFFE. Das wäre dann ja in Dezimal 65534.

Wie kann ich das elegant umrechnen?

DANKE!
--
So ist das!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
04.10.2004, 09:16 Uhr
virtual
Sexiest Bit alive
(Operator)


Ein nicht portabler weg wäre:

C++:
#include <stdint.h>
...
char x[] = {0xff, 0xfe, ... };
uint16_t i = *((uint16_t*)(x+j)); // Bildet die Zahl aus x[j] und x[j+1]



Ist aber nicht portabel, weil dieser Source einen bestimmten Endian voaussetzt (BigEndian, um bei deinem Beispiel zu bleiben. Entweder du benutzt dann ntohs oder htons um den Wert noch richtig zu konvertieren, oder aber du gehst gleich einen ganz anderen weg:


C++:
#include <stdint.h>
#define MAKEWOR(A,B) ( ((A)<<8) + (B)))

char x[] = {0xff, 0xfe, ... };
uint16_t i = MAKEWORD(x[j], x[j+1]);


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
04.10.2004, 14:46 Uhr
~Mr. T
Gast


Danke!!

Das war ein guter Tipp!! Aud das schieben bin ich garnicht gekommen...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
05.10.2004, 00:37 Uhr
Hans
Library Walker
(Operator)



Zitat von Mr. T:
Hello again!

Ich bräuchte eine Idee, wie ich aus einem char [x] - Feld, in dem ASCII zeichen stehen, den dazugehörigen Hexwert in dezimal auslesen könnzte. Das wäre jetzt ja zu einfach, wenn nicht:

im Feld[0] z.B.: 0xFF sthen würde und im Feld[1] dann 0xFE und die Zahl aber zusammen gehört - zu 0xFFFE. Das wäre dann ja in Dezimal 65534.

Wie kann ich das elegant umrechnen?

DANKE!

Hi,

das ist auch mal wieder ein Fall, wo sich meiner Meinung nach eine union anbietet:

C++:
union
{
  char c[sizeof(int)];
  int z;
}number;



Dann kopierst Du die Bytes aus Deinem array in die union, (richtige Stelle beachten, wenn int >16 Bit ist), und liesst sie als int wieder aus. Der Trick besteht darin, das bei der union immer auf den selben physikalischen Speicher zugegriffen wird, die Bytes aber unterschiedlich interpretiert werden. Irgendwo hier im Forum geistert auch noch ein Programm von mir herum, das diesen Effekt ausnutzt, indem es einen Text auf die Mattscheibe bringt, der in einer langen Reihe von float-zahlen codiert ist.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
05.10.2004, 08:36 Uhr
ao

(Operator)



Zitat von Hans:
das ist auch mal wieder ein Fall, wo sich meiner Meinung nach eine union anbietet:

Geniale Idee, wenn da nicht wieder die Endianness wäre. Das ist ähnlich wie das Umcasten in virtuals erstem Vorschlag: Man darf nicht vergessen, dass es unportabel ist.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: