# Given 3 Bytes of Data - How to convert to 6 digit ID code?

I am given 3 bytes defined as:

MSB_ID
ID
LSB_ID

Obviously, MSB and LSB stand for Most Significant Byte and Least Significant Byte.

How can I derive a 6-digit integer ID code from this in C#?

I have a similar operation in the program that calculates from just an MSB and an LSB to get a resultant integer:

``````int timer = Convert.ToInt32(msb, 16) << 8 | Convert.ToInt32(lsb, 16);
``````

However, with the added 'middle' byte, I am a bit lost.
LVL 1
###### Who is Participating?

Commented:
The largest number you can specify is (2^24 - 1) ==>  16,777,215 which is more than 6 digits.

Perhaps you are supposed to convert each byte into two hexadecimal digits.
0

Commented:
The formula to convert three bytes (24 bits) to binary is:

MSB_iD*256 ²  +  MID_ID*256  +  LSB_ID
0

Author Commented:
To binary?  I am looking for a 6-digit id code, such as '123456' .. to be derived from the 3 given bytes.
0

Commented:
You can't guarantee to be able to do it for all possible ids using only digits.
With three bytes, there are 16777216 different possible IDs. So you would need 8 digits unless you knew something special about the data (like MSB_ID is only ever 1-50).
If you want a 6 character hex number (0-9 and A-F), then that would work for three bytes.

If neither of the above apply, it is literally impossible. The other thing you could do (possibly) is just assign IDs and keep a mapping somewhere. But there is no way to guarantee a unique six digit decimal number for three bytes.
0

Commented:
An error in the first comment:

The formula to convert three bytes (24 bits) to decimal is ....
0

Commented:
To convert a byte into two hex digits you do an integer division by 16 and take the quotient and the remainder.
0

Commented:
Does it matter what 6 digits you get out of what MSB_ID ID LSB_ID values?
If so, can you give us an example of the conversion you want?
0

Author Commented:
I will actually close this question.  What the customer wanted was as follows:

3 bytes given, convert bytes to strings, concatenate to create hex string, convert string to int

``````string hexVal = msb + b + lsb;
int i = Convert.ToInt32(hexVal, 16);
``````

It was that simple.
0

Commented:
That will be up to 8 digits. If that's fine with the customer, then great!

Um, if msb, b, and lsb are bytes, won't they get converted to integers when you add them?
3 4 5 and 2 2 8 will yield the same result.
You probably want something like msb.ToString("000") + b.ToString("000") + lsb.ToString("000")

Or msb*256*256 + b*256 + lsb
0

Author Commented:
I mentioned before the code "convert bytes to strings" ... this takes place before they are passed to the code above.
0

Commented:
So you were saying that the conversion happened before your code. Got it. Glad you got it working.
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.