Naruto
Naruto

Reputation: 9634

How to convert CString to UCHAR array?

I have a cstring object str = "5043", now i want to convert to Hex and put it in UCHAR array like

UCHAR sample[2];
Sample[0] = 0X50 
Sample[1] = 0X43

How can i do this? please advice me

Upvotes: 0

Views: 1616

Answers (3)

Andriy
Andriy

Reputation: 8604

To make your code simpler, you may use an union, e.g.

    union
    {
    UCHAR char_val[2];
    long long_val;
    };

    CString str = "5043";
    long_val = strtol(str.GetString(), nullptr, 16);
    // use char_val here

Upvotes: 0

vvnraman
vvnraman

Reputation: 1343

You can scan the hex values directly from the string using sscanf(), something like below:

UCHAR sample[2];
for ( int i = 0; i < str.length() / 2 ; i++) {
    sscanf( (str.substr(i*2,2)).c_str(), "%hx", &sample[i]);
}

h is for short and x is for hexadecimal obviously.

Also, this assumes that the UCHAR array is declared to be half as large as the string size.

Upvotes: 1

Adrian Conlon
Adrian Conlon

Reputation: 3941

Have you tried strol? It seems a little low tech, but should do the trick. Don't forget to pass 16 as the base...

You'll need to combine it with a little bit shifting and bitwise anding to split the result into exactly what you require, but that should be straightforward.

Hope this helps,

Upvotes: 1

Related Questions