将4个字节转换为有符号整数

Ali*_*bar 6 dart

我正在尝试在浏览器中解析二进制文件.我有4个字节代表一个32位有符号整数.
有没有将它转换为dart int的直接方法,还是我必须手动计算二进制补码的倒数?

谢谢

编辑:使用此手动转换:

  int readSignedInt() {
    int value = readUnsignedInt();
    if ((value & 0x80000000) > 0) {
      // This is a negative number.  Invert the bits and add 1
      value = (~value & 0xFFFFFFFF) + 1;

      // Add a negative sign
      value = -value;
    }
    return value;
  }
Run Code Online (Sandbox Code Playgroud)

Ale*_*uin 7

您可以使用的ByteArraytyped_data库.

import 'dart:typed_data';

int fromBytesToInt32(int b3, int b2, int b1, int b0) {
  final int8List = new Int8List(4)
    ..[3] = b3
    ..[2] = b2
    ..[1] = b1
    ..[0] = b0;
  return int8List.asByteArray().getInt32(0);
}

void main() {
  assert(fromBytesToInt32(0x00, 0x00, 0x00, 0x00) == 0);
  assert(fromBytesToInt32(0x00, 0x00, 0x00, 0x01) == 1);
  assert(fromBytesToInt32(0xF0, 0x00, 0x00, 0x00) == -268435456);
}
Run Code Online (Sandbox Code Playgroud)

  • 这已更改为“dart:typed_array”。这里是 [ByteData](https://api.dartlang.org/apidocs/channels/stable/dartdoc-viewer/dart:typed_data.ByteData),它大致相当于前面的 `ByteArray` (2认同)