Das würde mich in der Tat sehr interessieren!
Ich find's grad nicht mehr! Ist nicht in der Projekt-History gelandet. Aber es wird auffindbar sein
Edit:
Im falschen Ordner gelandet... Beim markieren als Code sind die Einrückungen verloren gegangen, aber zum Anschauen reicht es ja.
Der Code kommt ohne Bibliothek aus, also ein reines C-Programm.
getValFromHexChar wandelt ein einzelnes Hex-Zeichen in einen binären Wert. Erlaubt sind 0..9 und a..f oder A..F.
toAscii wandelt einen binären Wert in eine 3-stellige Dezimalzeichenkette. Der Parameter fillZeroes gibt an, ob führende Nullen verwendet werden sollen, also z.B. "001". Der Code funktioniert für 8-Bit-Werte (0x00 - 0xFF).
Das Hauptprogramm wandelt den Beispielwert "0x70" in eine Dezimalzahl als Zeichenkette "112".
Das "0x" wird bei der Verarbeitung überlesen, der Code geht also von einem Hex-Wert aus.
Zwecks Übersichtlichkeit habe ich Speicherfreigaben oder Fehlerprüfung beim zu übergebenden Wert weggelassen.
// Byte-Arrays werden der Übersichtlichkeit wegen in dieser Demo nicht freigegeben...
int getValFromHexChar(char t)
{
if (t >= '0' && t <= '9')
return t - '0';
if (t >= 'A' && t <= 'F')
return t - 'A' + 10;
if (t >= 'a' && t <= 'f')
return t - 'a' + 10;
return -1; // Fehler
}
char* toAscii(int v, bool fillZeroes)
{
char* text = new char[4] { " " };
int i = 0;
int h = v / 100;
if (h > 0)
{
text[i] = h + '0';
++i;
v -= h * 100;
}
else if (fillZeroes)
{
text[i] = '0';
++i;
}
if (v > 10)
{
int d = v / 10;
text[i] = d + '0';
++i;
v -= d * 10;
}
else if (i > 0) // gibt es schon eine Hunderter-Stelle?
{
text[i] = '0';
++i;
}
else if (fillZeroes)
{
text[i] = '0';
++i;
}
if (v > 0)
{
text[i] = v + '0';
++i;
}
else if (i > 0)
{
text[i] = '0';
++i;
} // else Ergebnis bleibt leer
text[i] = 0; // Abschluss-Byte
return text;
}
int main()
{
char* hexAscii = new char[5] { "0x70" }; // zu konvertierende Hex-Zahl
int intVal = getValFromHexChar(hexAscii[2]) * 16;
intVal += getValFromHexChar(hexAscii[3]);
char* decimalAscii = toAscii(intVal, true/*führende Null erwünscht*/);
}
Alles anzeigen