CookieMonster
CookieMonster

Reputation: 856

How to convert Uint8List to decimal number in Dart?

I have an Uint8List data list, for example:

Uint8List uintList = Uint8List.fromList([10, 1]);

How can I convert these numbers to a decimal number?

int decimalValue = ???  // in this case 265

Upvotes: 2

Views: 3184

Answers (2)

jamesdlin
jamesdlin

Reputation: 90105

Mees' answer is the correct general method, and it's good to understand how to do bitwise operations manually.

However, Dart does have a ByteData class that has various functions to help parse byte data for you (e.g. getInt16, getUint16). In your case, you can do:

Uint8List uintList = Uint8List.fromList([10, 1]);
int decimalValue = ByteData.view(uintList.buffer).getInt16(0, Endian.little);
print(decimalValue); // Prints: 266.

Upvotes: 3

Mees
Mees

Reputation: 23

From what I understand of your question, you want decimalValue to be an integer where the least significant byte is (decimal)10, and the byte after that to be 1. This would result in the value 1 * 256 + 10 = 266. If you meant the bytes the other way around, it would be 10 * 256 + 1 = 2560 + 1 = 2561.

I don't actually have any experience with dart, but I assume code similar to this would work:

int decimalValue = 0;
for (int i = 0; i < uintList.length; i++) {
    decimalValue = decimalValue << 8; // shift everything one byte to the left
    decimalValue = decimalValue | uintList[i]; // bitwise or operation
}

If it doesn't produce the number you want it to, you might have to iterate through the loop backwards instead, which requires changing one line of code:

for (int i = uintList.length-1; i >= 0; i--) {

Upvotes: 2

Related Questions