• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 420
  • Last Modified:

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);

Open in new window


However, with the added 'middle' byte, I am a bit lost.
0
BullfrogSoftware
Asked:
BullfrogSoftware
  • 4
  • 3
  • 3
  • +1
2 Solutions
 
d-glitchCommented:
The formula to convert three bytes (24 bits) to binary is:

          MSB_iD*256 ²  +  MID_ID*256  +  LSB_ID
0
 
BullfrogSoftwareAuthor Commented:
To binary?  I am looking for a 6-digit id code, such as '123456' .. to be derived from the 3 given bytes.
0
 
d-glitchCommented:
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
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
TommySzalapskiCommented:
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
 
d-glitchCommented:
An error in the first comment:

     The formula to convert three bytes (24 bits) to decimal is ....
0
 
d-glitchCommented:
To convert a byte into two hex digits you do an integer division by 16 and take the quotient and the remainder.
0
 
ozoCommented:
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
 
BullfrogSoftwareAuthor 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);

Open in new window


It was that simple.
0
 
TommySzalapskiCommented:
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
 
BullfrogSoftwareAuthor Commented:
I mentioned before the code "convert bytes to strings" ... this takes place before they are passed to the code above.
0
 
TommySzalapskiCommented:
So you were saying that the conversion happened before your code. Got it. Glad you got it working.
0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 4
  • 3
  • 3
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now