• C

# C to VB.Net conversion

Hello,

Can anyone explain the following code in C to help me try to translate to VB.Net?

The define part I understand - someone kindly explained this to me yesterday.

Thank you.

#define S1(a) (((a&2)>>1) | ((a&1)<<2))
#define S2(a) (((a&2)>>0) | ((a&1)<<3))
#define S3(a) (((a&2)>>1) | ((a&1)<<2))
#define S4(a) (((a&2)>>0) | ((a&1)<<3))
#define S5(a) (((a&2)>>1) | ((a&1)<<2))
#define S6(a) (((a&2)>>0) | ((a&1)<<3))
#define S7(a) a

static const int x[] = {
S1(2),S1(0),S1(1),S1(1),S1(2),S1(3),S1(3),S1(0),
S1(3),S1(2),S1(2),S1(0),S1(1),S1(1),S1(0),S1(3),
S1(0),S1(3),S1(3),S1(0),S1(2),S1(2),S1(1),S1(1),
S1(2),S1(2),S1(0),S1(3),S1(1),S1(1),S1(3),S1(0)
};
static const int x[] = {
S2(3),S2(1),S2(0),S2(2),S2(2),S2(3),S2(3),S2(0),
S2(1),S2(3),S2(2),S2(1),S2(0),S2(0),S2(1),S2(2),
S2(3),S2(1),S2(0),S2(3),S2(3),S2(2),S2(0),S2(2),
S2(0),S2(0),S2(1),S2(2),S2(2),S2(1),S2(3),S2(1)
};
static const int x[] = {
S3(2),S3(0),S3(1),S3(2),S3(2),S3(3),S3(3),S3(1),
S3(1),S3(1),S3(0),S3(3),S3(3),S3(0),S3(2),S3(0),
S3(1),S3(3),S3(0),S3(1),S3(3),S3(0),S3(2),S3(2),
S3(2),S3(0),S3(1),S3(2),S3(0),S3(3),S3(3),S3(1)
};
static const int x[] = {
S4(3),S4(1),S4(2),S4(3),S4(0),S4(2),S4(1),S4(2),
S4(1),S4(2),S4(0),S4(1),S4(3),S4(0),S4(0),S4(3),
S4(1),S4(0),S4(3),S4(1),S4(2),S4(3),S4(0),S4(3),
S4(0),S4(3),S4(2),S4(0),S4(1),S4(2),S4(2),S4(1)
};
static const int x[] = {
S5(2),S5(0),S5(0),S5(1),S5(3),S5(2),S5(3),S5(2),
S5(0),S5(1),S5(3),S5(3),S5(1),S5(0),S5(2),S5(1),
S5(2),S5(3),S5(2),S5(0),S5(0),S5(3),S5(1),S5(1),
S5(1),S5(0),S5(3),S5(2),S5(3),S5(1),S5(0),S5(2)
};
static const int x[] = {
S6(0),S6(1),S6(2),S6(3),S6(1),S6(2),S6(2),S6(0),
S6(0),S6(1),S6(3),S6(0),S6(2),S6(3),S6(1),S6(3),
S6(2),S6(3),S6(0),S6(2),S6(3),S6(0),S6(1),S6(1),
S6(2),S6(1),S6(1),S6(2),S6(0),S6(3),S6(3),S6(0)
};
static const int x[] = {
S7(0),S7(3),S7(2),S7(2),S7(3),S7(0),S7(0),S7(1),
S7(3),S7(0),S7(1),S7(3),S7(1),S7(2),S7(2),S7(1),
S7(1),S7(0),S7(3),S7(3),S7(0),S7(1),S7(1),S7(2),
S7(2),S7(3),S7(1),S7(0),S7(2),S7(3),S7(0),S7(2)
};
###### Who is Participating?

Data Warehouse Architect / DBACommented:
Hi IAJWDDIY,

All of the #define statements are creating macros.  Looking at the first one:

#define S1(a) (((a&2)>>1) | ((a&1)<<2))

If the second bit from the right in the pass value is a 1, shift the value 1 bit right, else shift it two bits left.  The macro allows the relative shortcut form instead of typing all of this out every time the function(macro) is needed.

static const int x[] = {
S1(2),S1(0),S1(1),S1(1),S1(2),S1(3),S1(3),S1(0),
S1(3),S1(2),S1(2),S1(0),S1(1),S1(1),S1(0),S1(3),
S1(0),S1(3),S1(3),S1(0),S1(2),S1(2),S1(1),S1(1),
S1(2),S1(2),S1(0),S1(3),S1(1),S1(1),S1(3),S1(0)
};

As bad as that is, it's better than:
static const int x[] = {
(((2&2)>>1) | ((2&1)<<2)),(((0&2)>>1) | ((0&1)<<2)),(((1&2)>>1) | ((1&1)<<2)),(((1&2)>>1) | ((1&1)<<2)),(((2&2)>>1) | ((2&1)<<2)),(((3&2)>>1) | ((3&1)<<2)),(((3&2)>>1) | ((3&1)<<2)),(((0&2)>>1) | ((0&1)<<2)),

By the way, that's for the FIRST line.  :)

Of course, you can always simplify, but that's not self documenting

static const int x[] = {
2<<2, 0, 0, 0, 2<<2, 3<<2, 3<<2, 0
etc....

Good Luck,
Kent
0

Data Warehouse Architect / DBACommented:

Err...  The last example should be:

static const int x[] = {
2>>1, 0, 1<<2, 1<<2, 2>>1, 3>>1, 3>>1, 0,

Which is:

static const int x[] = {
1, 0, 4, 4, 1, 1, 1, 0,

Kent
0

Author Commented:
Hi Kent,

The static const int x[] bit, is that an array?

Thank you.
0

Commented:
yep
that is an array on int values
the number of elemnts in the array is determined by the number of values in the initiation (32 in your case)
remember that c array are zero based
0

Author Commented:
Kent,

Thank you.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.