Rolf B: Typkonvertierung in C bzw. Perl

Beitrag lesen

Hallo Troll19,

für C hätte ich zwei Vorschläge. Einmal eine "handgemachte" Konvertierung, einmal mit Hilfe von sprintf.

Der Code beginnt mit Deklarationen der beiden Konvertierfunktionen, dumpString und dumpString2. Dann kommt die main-Funktion als Testtreiber, danach die handgemachte Variante. Sie besteht aus der Hilfsfunktion toHex und der Konvertierfunktion dumpString. Danach kommt die Variante mit sprintf, sie heißt dumpString2.

In der handgemachten Variante muss man die Null-Terminierung der Ausgabe selbst machen. Bei sprintf erledigt das die Library.

C-Code mit einer Braille Zeile zu verstehen ist eine besondere Leistung. Meinen Respekt!

#include <stdio.h>

int dumpString(char* buffer, int bufSize, char* s);
int dumpString2(char* buffer, int bufSize, char* s);

int main()
{
    char outputBuffer[100] = "***********123456789";
    printf("Hello World\n");
    dumpString2(outputBuffer, 11, "Hello World");
    printf("%s\n", outputBuffer);

    return 0;
}

char toHex(char c)
{
    return c + (c < 10 ? '0' : 'W');
}
int dumpString(char* buffer, int bufSize, char* s)
{
    int p;
    for (p=0; *s && p<bufSize-2; p+=2)
    {
        buffer[p] = toHex((*s & 0xf0)>>4);
        buffer[p+1] = toHex(*s++ & 0x0f);
    }
    buffer[p] = '\0';
    return p>>1;
}

int dumpString2(char* buffer, int bufSize, char* s)
{
    int p;
    for (p=0; *s && p<bufSize-2; p+=2)
        sprintf(buffer+p, "%02x", *s++);

    return p>>1;
}

Rolf

--
sumpsi - posui - clusi