Vulpecula
Commander
- Registriert
- Nov. 2007
- Beiträge
- 2.245
Guten Abend zusammen!
Ich bin heute auf ein Codefragment gestoßen, das mir Kopfzerbrechen bereitet. Es handelt sich hier (angeblich) um eine Möglichkeit, einen String, der die hexadezimale Repräsentation einer Zahl enthält, in einen Integer (hier vom Typ Long) umzuwandeln:
Im Prinzip ist der Code für mich wertlos, da er keine negativen Werte abbilden kann, aber trotzdem möchte ich gerne wissen, was da vor sich geht.
Etwas konkreter: Ich könnte schon verstehen, was in der while-Schleife passiert (eine bitweise Operation), nur störe ich mich an dem
Leider hatte ich noch keine Zeit, den Code zu kompilieren und auf einem AVR hochzuladen, aber vielleicht mag mir ja jemand auf die Sprünge helfen und/oder mir sagen, wonach ich auf der allwissenden Müllhalde suchen muss, um mehr zu erfahren.
Vielen Dank,
Vulpecula
Ich bin heute auf ein Codefragment gestoßen, das mir Kopfzerbrechen bereitet. Es handelt sich hier (angeblich) um eine Möglichkeit, einen String, der die hexadezimale Repräsentation einer Zahl enthält, in einen Integer (hier vom Typ Long) umzuwandeln:
C++:
static const long hextable[] =
{
[0 ... 255] = -1, // bit aligned access into this table is considerably
['0'] = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, // faster for most modern processors,
['A'] = 10, 11, 12, 13, 14, 15, // for the space conscious, reduce to
['a'] = 10, 11, 12, 13, 14, 15 // signed char.
};
/**
* @brief convert a hexidecimal string to a signed long
* will not produce or process negative numbers except
* to signal error.
*
* @param hex without decoration, case insensitive.
*
* @return -1 on error, or result (max (sizeof(long)*8)-1 bits)
*/
long hexdec(unsigned const char *hex)
{
long ret = 0;
while (*hex && ret >= 0)
{
ret = (ret << 4) | hextable[*hex++];
}
return ret;
}
Etwas konkreter: Ich könnte schon verstehen, was in der while-Schleife passiert (eine bitweise Operation), nur störe ich mich an dem
hextable[]
Konstrukt, denn sowas habe ich (in meiner zugegeben kurzen Zeit mit C++) bisher noch nicht gesehen. Es sieht zunächst nach einem Array aus, ist dann aber doch keins. Wie nennt man sowas?Leider hatte ich noch keine Zeit, den Code zu kompilieren und auf einem AVR hochzuladen, aber vielleicht mag mir ja jemand auf die Sprünge helfen und/oder mir sagen, wonach ich auf der allwissenden Müllhalde suchen muss, um mehr zu erfahren.
Vielen Dank,
Vulpecula
Zuletzt bearbeitet: