4

I have the following 4 integer values which represent ARGB:

int value1 = 0xFF;
int value2 = 68;
int value3 = 68;
int value4 = 68;

I would like to concatenate the values so they represent following:

int test = 0xFF686868;

My current approach is to use:

int test2 = 0xFF | value1 | value2 | value3;

But using this approach the integer values of test1 and test2 do not match, what am I doing wrong? I am limited to J2ME.

1 Answer 1

10

You're almost there: all you need to do is shifting the individual bytes into position before OR-ing them together.

int test2 = (value1 << 24) | (value2 << 16) | (value3 << 8) | value4;

Don't forget to make your 68s hex for the desired output of 0xFF686868

int value2 = 0x68; // Add 0x to all three of the 68s
Sign up to request clarification or add additional context in comments.

2 Comments

Could you explain why I must shift the bytes? Also, how would I convert 68 to 0x68? Thanks
@S-K' Think of shifting left as adding zeros to the right. In hex notation, a shift by 4 is the same as adding one zero to the end. Shifting by 24 adds 6 zeros, by 16 - 4 zeros, by 8 - 2 zeros. Since ORing with zero yields the original number, shifting and ORing bytes lets you construct a four-byte number.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.