468,253 Members | 1,241 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 468,253 developers. It's quick & easy.

map and BYTE[]

Hi,

I am starting to play with with C++ and I have some questions.
I need to parse a XML file that describes a smart card file structure
and to initialize my data structure.
First I chose this structure :

A CCardObject has files (index by SFID) and each file has
records(indexed by RecNo) and each record can be splitted into
data(index by string).
class CDataIndex
{
public :
int m_nSFID; // FileID
int m_nRecNo; // RecNo
int m_nOffset; // Offset
int m_nSize; // DataLen
CDataIndex() { }
CDataIndex(int nSFID, int nRecNo, int nOffset, int size) {
m_nSFID = nSFID;
m_nRecNo = nRecNo;
m_nOffset = nOffset;
m_nSize = size;
}

CDataIndex(const CDataIndex& ob)
{
m_nSFID = ob.m_nSFID;
m_nRecNo = ob.m_nRecNo;
m_nOffset = ob.m_nOffset;
m_nSize = ob.m_nSize;
}

void operator = (const CDataIndex& ob)
{
m_nSFID = ob.m_nSFID;
m_nRecNo = ob.m_nRecNo;
m_nOffset = ob.m_nOffset;
m_nSize = ob.m_nSize;
}
};
class CCardRecord
{
public :
int m_nRecNo;
int m_nRecSize;
map<int, BYTE[29]> m_RecData;

CCardRecord() {}
CCardRecord( int nRecNo ) { m_nRecNo = nRecNo;}

int GetRecNo() { return m_nRecNo; }
int GetRecSize() { return m_nRecSize; }
int GetData(int nOffset, int nSize);
};

class CCardFile
{
public :
int m_nSFID;
map<int, CCardRecord> m_records;

CCardFile() {}
CCardFile( int nSFID ) { m_nSFID = nSFID;}

};

class CCardObj
{
public:
CCardObj();
virtual ~CCardObj();
BOOL LoadCardMapping();
BOOL ReadMappingFile(CXMLReader &xml);
void XMLCardFile(CXMLReader &xml);
void XMLCardRecord( CXMLReader &xml );
void XMLCardData( CXMLReader &xml );

CString m_csTag;
int m_nSFID;
int m_nRecNo;
int m_nRecSize;
int m_nDataOffset;
int m_nDataType;
int m_nDataSize;
CString m_csName;
BYTE m_Data[29];

// CardReader Object - LOW LEVEL API
CCardReader* m_pCardReader;

// Associate stringwith SFID, RecNo, Offset and Size
map<CString, CDataIndex> m_dataIndex;

// File collection index by Short File Id (SFID)
map<int, CCardFile> m_FileIndex;
};

When I parse the XML file and I find the <CardRecord> tag I get its
attributes and I would like to add a new array of byte.
How can I do that ?

void CCardObj::XMLCardRecord( CXMLReader &xml )
{
xml.getAttribute( "index", m_nRecNo ); // Get record No
xml.getAttribute( "size", m_nRecSize );// Get record size

m_FileIndex[ m_nSFID ].m_records[ m_nRecNo ] = ????

xml.intoTag();
while ( xml.nextTag( m_csTag ) ){
if (m_csTag == "CardData"){
XMLCardData( xml );
}
}
xml.outofTag();
}
Jul 22 '05 #1
7 2351

"Vince" <vs**@caramail.com> wrote in message
news:41***********************@news.free.fr...
Hi,

When I parse the XML file and I find the <CardRecord> tag I get its
attributes and I would like to add a new array of byte.
How can I do that ?


unsigned char array = new char[how_many_chars];
/* work with the array */
delete[] array;
Jul 22 '05 #2
On Mon, 17 Jan 2005 22:42:15 +0000, Mike Wahler wrote:
ITYM:
unsigned char* array = new char[how_many_chars];
/* work with the array */
delete[] array;


Jul 22 '05 #3
Mike Wahler wrote:
"Vince" <vs**@caramail.com> wrote in message
news:41***********************@news.free.fr...
Hi,

When I parse the XML file and I find the <CardRecord> tag I get its
attributes and I would like to add a new array of byte.
How can I do that ?

unsigned char array = new char[how_many_chars];


unsigned char *array = new char[how_many_chars];
/* work with the array */
delete[] array;


V
Jul 22 '05 #4

"Victor Bazarov" <v.********@comAcast.net> wrote in message
news:wo*******************@newsread1.mlpsca01.us.t o.verio.net...
Mike Wahler wrote:
"Vince" <vs**@caramail.com> wrote in message
news:41***********************@news.free.fr...
Hi,

When I parse the XML file and I find the <CardRecord> tag I get its
attributes and I would like to add a new array of byte.
How can I do that ?

unsigned char array = new char[how_many_chars];


unsigned char *array = new char[how_many_chars];


Dang! I think I'll go do some laundry or something. :-)

Thanks for the correction.

-Mike
Jul 22 '05 #5
Victor Bazarov wrote:
Mike Wahler wrote:
"Vince" <vs**@caramail.com> wrote in message
news:41***********************@news.free.fr...

unsigned char array = new char[how_many_chars];


unsigned char *array = new char[how_many_chars];

^^^^^^^^^^^^^ ^^^^

Those aren't the same type.

Sjoerd

Jul 22 '05 #6

"Sjoerd A. Schreuder" <sa**********@wanadoo.nl> wrote in message
news:41***********************@news.wanadoo.nl...
Victor Bazarov wrote:
Mike Wahler wrote:
"Vince" <vs**@caramail.com> wrote in message
news:41***********************@news.free.fr...

unsigned char array = new char[how_many_chars];


unsigned char *array = new char[how_many_chars];

^^^^^^^^^^^^^ ^^^^

Those aren't the same type.


Hmm, yes I missed that, as well as those who corrected my
other error.

One more try:

unsigned char *array = new unsigned char[how_many_chars];

-Mike
Jul 22 '05 #7
Vince wrote:

class CCardRecord
{
public :
int m_nRecNo;
int m_nRecSize;
map<int, BYTE[29]> m_RecData;


You cannot have an array as the value type for a standard
library container. I suggest you replace BYTE[29] with
a std::vector<BYTE> . (That also avoids having to do
the 'new' statement that has been problematic in this thread).

Jul 22 '05 #8

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

2 posts views Thread by David Cook | last post: by
8 posts views Thread by intrepid_dw | last post: by
6 posts views Thread by Dennis | last post: by
4 posts views Thread by Frederick Gotham | last post: by
10 posts views Thread by Scott Townsend | last post: by
reply views Thread by NPC403 | last post: by
reply views Thread by zattat | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.