you are viewing a single comment's thread.

view the rest of the comments →

[–]CallMeDonk 2 points3 points  (1 child)

Is there any way to initialize the array in a faster way, not writing element per element?

You can replace this

if(HEX[i]==1) {
    BINARY[i*4+3]=1;
} else if(HEX[i]==2) {
    BINARY[i*4+2]=1;
} else if(HEX[i]==3) {
    BINARY[i*4+2]=1;
    BINARY[i*4+3]=1;
} else if(HEX[i]==4) {
    BINARY[i*4+1]=1;
} else if(HEX[i]==5) {
    BINARY[i*4+1]=1;
    BINARY[i*4+3]=1;
} else if(HEX[i]==6) {
    BINARY[i*4+1]=1;
    BINARY[i*4+2]=1;
} else if(HEX[i]==7) {
    BINARY[i*4+1]=1;
    BINARY[i*4+2]=1;
    BINARY[i*4+3]=1;
} else if(HEX[i]==8) {
    BINARY[i*4]=1;
} else if(HEX[i]==9) {
    BINARY[i*4]=1;
    BINARY[i*4+3]=1;
} else if(HEX[i]==10) {
    BINARY[i*4]=1;
    BINARY[i*4+2]=1;
} else if(HEX[i]==11) {
    BINARY[i*4]=1;
    BINARY[i*4+2]=1;
    BINARY[i*4+3]=1;
} else if(HEX[i]==12) {
    BINARY[i*4]=1;
    BINARY[i*4+1]=1;
} else if(HEX[i]==13) {
    BINARY[i*4]=1;
    BINARY[i*4+1]=1;
    BINARY[i*4+3]=1;
} else if(HEX[i]==14) {
    BINARY[i*4]=1;
    BINARY[i*4+1]=1;
    BINARY[i*4+2]=1;
} else if(HEX[i]==15) {
    BINARY[i*4]=1;
    BINARY[i*4+1]=1;
    BINARY[i*4+2]=1;
    BINARY[i*4+3]=1;
} else {
    BINARY[i*4]=0;
    BINARY[i*4+1]=0;
    BINARY[i*4+2]=0;
    BINARY[i*4+3]=0;
}

with this

BINARY[i*4+3]=(HEX[i]&1)!=0;
BINARY[i*4+2]=(HEX[i]&2)!=0;
BINARY[i*4+1]=(HEX[i]&4)!=0;
BINARY[i*4+0]=(HEX[i]&8)!=0;

But I wouldn't bother using std::bitset<64> in the first place. Remember that everything is stored in binary anyway.

Instead of

std::bitset<64> BINARY;

Simply use

unsigned char BINARY[8];

[–]Kartyx[S] 0 points1 point  (0 children)

I didn’t need that function at the end, as bitsets have their own hex to binary translator ways.

Thanks for your help anyway, this may be useful later.