Frage

Ok, ich weiß, das vor gefragt wurde, aber nach der Suche ich keine richtige Antwort gefunden.

Ich brauche einen Puffer (unsigned char *) zu Base64 konvertieren, die Base64-Funktion ich verwende nimmt als Paramter:

void Base64Enc(const unsigned char *src, int srclen, unsigned char *dest)

Dabei gilt int srclen die Länge der src Zeichenfolge ist.

Meine Frage ist, wie kann ich die Länge meiner Puffer erhalten. Nein, es ist nicht null beendet. Nein, ich will nicht die sizeof(BYTE). Ich muss nur wissen, was als srclen passieren, damit ich diesen Puffer zu base64 umwandeln kann.

Bearbeiten :

Hier ist ein Code zeigt, was ich tue:

unsigned char *pBytes;
unsigned char *B64Encoded;
int b64size = 0;

if (pBytes = (unsigned char *) GlobalLock(hMem))
{
    DWORD size = (DWORD)GlobalSize(hMem);
    b64size = size / sizeof(unsigned char);
    Base64Enc(pBytes, b64size, B64Encoded);

    // in this case save the buffer to a file just for testing
    if (fp = fopen("ububub.txt", "wb"))
    {   
        printf("data: %s\n", B64Encoded);
        fwrite(B64Encoded, strlen(B64Encoded), 1, fp);
        fclose(fp);
    }
}
War es hilfreich?

Lösung

Wenn es nicht beendet NULL ist oder etwas terminierte, der einzige Weg, um die Größe zu wissen ist, Überblick zu behalten, wenn Sie zum ersten Mal es.

Wie bekommen Sie den Puffer in erster Linie? Was auch immer das ist wahrscheinlich gibt Ihnen ein Verfahren zur Herstellung auch die Länge des Puffers zu erhalten.

EDIT

Ihr Kommentar:

  

ich habe die Größe des Speichers, die das   Daten nehmen. Ich habe versucht, das Spiel mit, dass   aber es ist nicht die korrekte Information   offenbar.

In diesem Fall nehmen Sie Ihre RAW-Format und teilen sie durch die Größe jedes Elements die Anzahl der Elemente zu erhalten:

unsigned numelem = size / sizeof(unsigned char)

Dank Todd Gardner für den Hinweis auf, dass sizeof (unsigned char) ist durch den Standard definierte 1 zu sein, so dass die Anzahl der Elemente in Ihrem Puffer ist nur die Menge an Speicherplatz Ihrer Puffer verwendet wird.

Die „divide nach Größe des Elements“ ist die allgemeine Lösung für jede Art von Element.

Andere Tipps

Leider gibt es wirklich keine Gattungs Antwort auf diese Frage. In C / C ++ ist es nicht möglich, einfach zu wissen, wie viele Elemente einen bestimmten Zeiger auf. Es liegt in der Verantwortung des Codes, um den Zeiger zu halten, dieses Wissen unterhält.

Sie finden diese Informationen durch vom nächsten Punkt fädeln müssen, wo Sie die Größe des Zeigers wissen.

if (pBytes = (unsigned char *) GlobalLock(hMem))

In diesem Fall haben Sie einen Griff hMem zu einem globalen Speicherblock. Dieser Griff muss durch einen Aufruf von GlobalAlloc gewonnen wurde () oder GlobalReAlloc (). Wenn einer dieser Anrufe müssen Sie die Speichergröße haben bekannt. Dies ist die Länge von Bytes, die Sie suchen.

Mit einem c-style-Array, müssen Sie bereits die Größe kennen, oder einen Sentinel haben beendet (wie NULL) Array. Die Laufzeit Maschinen hat Zugriff auf die Menge an Speicher zugewiesen, aber es gibt keine sichere, tragbare Art und Weise darauf zuzugreifen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top