I
Werte Forumsteilnehmer!
Problembeschreibung:
--------------------
Deklariert und definiert wird ein char[], indem die werte als hexvalue direkt reingeschrieben werden. Dies ist der sog. APDU-Block der einem Kommando-header bei der Kommunikation mit einer Chipkarte entspricht. Die API die ich verwenden darf verlangt den header und datenblock als char*.
"Leider" entspricht 0x00 bei einem Char dem Terminierungszeichen aufgrund des ASCII-Codes - jedenfalls wird nach dem ersten Haltepunkt das array mf_select_header mit allen hex-werten angezeigt, sobald sich der debugger in der methode MergeHeaderAndData befindet wird der Übergabeparameter nurmehr mit 0x00 angezeigt, wie wenn er nach dem ersten 0x00 den rest kappen würde.
Frage: interpretiert der debugger jedes übergebene char[] als String? (Der Unterschied zwischen char* und char[] ist mir nach durchlesen der faq von de.comp.lang.c halbwegs klar erschienen - aber offensichtlich der übergang von theorie auf praxis nicht). dann wäre das verhalten logisch, ansonsten dürfte es an einem denkfehler meinerseits liegen
// Select MF
unsigned char mf_select_header[7] = {0x00, 0xA4,0x00,0x0C,0x02,0x3F,0x00};
unsigned char mf_fid[2] = {0x3F, 0x00};
pT->Select(rTComPeg, mf_select_header, mf_fid);
------------------
void CardComm::Select(TCommand_Pegoda *rTComPeg, unsigned char *header, unsigned char *data)
{
unsigned char* pucData = 0;
HALTEPUNKT
pucData = MergeHeaderAndData(header, data);
unsigned int uiDataLen = 0;
// see Commands for ACOS EMV: p2 = 00 for statuswords only
unsigned char pucRetData[3] = {0,0,0};
unsigned int puiRetLen[1] = {3};
unsigned int uiRetBufferLen = 3;
...
(usw, usf)
Borland-Version:
----------------
Ich benutze "den C++ Builder 6
uawg
d.e