如何在Dart中将Uint8List转换为十进制数字



我有一个Uint8List数据列表,例如:

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

如何将这些数字转换为十进制数字?

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

Mees的答案是正确的通用方法,了解如何手动执行位操作是很好的。

然而,Dart确实有一个ByteData类,它具有各种函数来帮助您解析字节数据(例如getInt16getUint16(。在你的情况下,你可以做:

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

根据我对您问题的理解,您希望decimalValue是一个整数,其中最低有效字节为(十进制(10,之后的字节为1。这将导致值1*256+10=266。如果你的意思是相反的字节,它将是10*256+1=2560+1=2561。

我实际上对dart没有任何经验,但我认为类似的代码会起作用:

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
}

如果它没有产生你想要的数字,你可能不得不反向迭代循环,这需要更改一行代码:

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

最新更新