2016-07-12 14 views
0

Ich habe einen C++ - Code, der Text und Bilder drucken wird. Beide funktionieren in Ordnung, wenn sie separat ausgeführt werden. Jetzt möchte ich das Drucken zusammenführen, damit ich das Bild beliebig einbetten kann.C: memcpy() mit NULL-Zeichen

data = "TEXT [LOGO] TEXT"; 

Angenommen, ich habe die Daten oben. Für Daten wie diese, was ich hier machen wollte, ist die [LOGO] durch die tatsächlichen Daten für den Belegdruck zu ersetzen. Bilddaten werden in einer Datei gespeichert (ESC Pos Commands Plus Bilddaten).

Probenbilddaten in einer Textdatei ..

1B40 1b61 011b 3308 1b2a 01F0 003F 7f7f
ffff ffff ffff ffff ffff ffff ffff ffff
ffff ffff ffff ffff ffff ffff ffff ffff
ffff ffff ffff ffff ffff fefe fcfc f8f8
f0f0 E0E1 c1c3 8707 0f0f 0000 0000 0000

wiederverwendet ich eine Suche und ersetzen func tion .. from this link...

Der Einfachheit halber wollen wir auf einen einfachen memcpy Anruf beziehen sich nur ...

char *temp = (char*) calloc(dataLength,dataLength * sizeof(char*)); 
memcpy(temp, logoBuffer, logoSize); 

Das Problem ist jetzt, dass logoBuffer viel 'NULL-Zeichen' enthält. Und während der Kopie wurden die Daten abgeschnitten.

Gibt es eine Problemumgehung dafür? ran out of ideas ...

+0

Wie ist 'logobuffer' aufgebaut - vielleicht behoben –

+1

' Calloc (DataLength, dataLength * sizeof (char *)) 'klingt nicht richtig. Kannst du ein [mcve] posten? –

+0

Genau, verstehst du den Operator 'sizeof'? Weißt du den Unterschied zwischen' calloc() 'und' malloc() '? Verstehst du, was ein 'void *' -Zeiger in [tag: c] ist? Ist Ihnen der Unterschied zwischen [tag: c] und [tag: C++] bekannt? Und auch * Ich habe ein C-Skript *, es ist wirklich schrecklich zu lesen. Es gibt keine C-Skripte. –

Antwort

1

Das grundlegende Problem ist, dass Sie Binärdaten in einer Textdatei speichern möchten. Dies ist im Allgemeinen nicht möglich, da Binärdaten keine Textdaten sind, obwohl Textdaten binäre Daten sind. Sie müssen Ihre Datei binär machen und entsprechend lesen/schreiben, indem Sie die entsprechenden Funktions- oder Funktionsparameter verwenden. Abgesehen davon, dass Sie Probleme mit oder vielleicht Sprachen haben, die anders sind, lesen Sie diesen Link zu verstehen.

Sie zum Beispiel, tun die dynamische Speicherzuweisung falsch, Sie nur mehr Speicherplatz zuweisen, als Sie offensichtlich wollen, damit kein sichtbares Problem verursacht. Aber die Tatsache, dass Sie die falsche Größe zuweisen bedeutet, dass Sie leicht etwas tun können, die sehr tragische Ergebnisse haben würde, zu verstehen, warum ich das über das Konzept der undefined Verhalten lesen.


Nicht jedes Byte eine Textdarstellung, so dass nicht jede Folge von Bytes als Text verwendet oder gedacht werden kann.

+0

meine Güte .. muss wirklich eine Menge lesen .. so denke ich, muss dies auf eine andere Art und Weise behandeln .. Vielen Dank für Ihre Eingaben. –

+0

@severinolorillajr Warum möchten Sie eine Low-Level-Sprache verwenden? Warum benutzen Sie nicht stattdessen einen fertigen Treiber? Ist es ein "* special *" - Betriebssystem, für das der Hersteller keinen Treiber verteilt? In welcher Sprache hast du den Rest des Programms geschrieben? –

+0

das ist eigentlich ein Kassensystem .. habe noch nicht viel Ahnung von allem. Dafür verwenden wir Visual C++ und VB. Eine der Herausforderungen hier ist, dass wir einen Nadeldrucker verwenden. Die Codes, die ich hier habe, funktionieren bereits. Sie müssen nur herausfinden, wie sie verarbeitet werden eine (wenn möglich). –