Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 将32位整数写入文件?_Flutter_Dart - Fatal编程技术网

Flutter 将32位整数写入文件?

Flutter 将32位整数写入文件?,flutter,dart,Flutter,Dart,我有一个32位无符号整数的列表: var unixTimestamps = [ 1573613134, 1573623934, 1573631134, 1573659934, 1573746334, 1573731934, 1573764334, 1573789534, 1573847134, 1573933534, 1573893934, 1573980334, 1574153134,

我有一个32位无符号整数的列表:

  var unixTimestamps = [
    1573613134,
    1573623934,
    1573631134,
    1573659934,
    1573746334,
    1573731934,
    1573764334,
    1573789534,
    1573847134,
    1573933534,
    1573893934,
    1573980334,
    1574153134,
    1574178334
  ];
我想把这些保存到一个文件中

列表需要迭代编写,因为它取决于用户与应用程序的交互

final file = await _localFile(filename);
for (var i=0; i<unixTimestamps.length; i++){
  file.writeAsBytesSync(unixTimestamps[i], mode: FileMode.append)
}
当我从那个文件读回数据时,我注意到它是无符号8位整数。(值介于0和255之间)

以下是readData脚本:

  Future readData(filename, i) async {
    try {
      final file = await _localFile(filename);
      List contents = await file.readAsBytesSync();
      return contents;
    } catch (e) {
      print(e);
      return 0;
    }
  }

有没有办法将文件保存并读取为32位整数?

如果不想使用标准解决方案,可以使用非标准方法来解决问题。
非标准方法示例(易于理解和维护):

void main(){
var list32=[0x40302010,0x10203040];
最终字节=总字节(列表32,4);
打印(字节);
final newList32=fromBytes(字节,4);
打印(列表32);
打印(新列表32);
}
列表到字节(列表,整数大小){
最终结果=[];
对于(变量i=0;i>(j*8)&0xff;
结果.添加(字节);
}
}
返回结果;
}
List fromBytes(列表,整数大小){
如果(list.length%size!=0){
抛出参数错误(“错误大小”);
}
最终结果=[];
对于(变量i=0;ifinal val=(byte&0xff)好的,您应该使用int8来写和读,但是您可以在写和读时转换数据类型,例如
  Future readData(filename, i) async {
    try {
      final file = await _localFile(filename);
      List contents = await file.readAsBytesSync();
      return contents;
    } catch (e) {
      print(e);
      return 0;
    }
  }
void main() {
  var list32 = [0x40302010, 0x10203040];
  final bytes = toBytes(list32, 4);
  print(bytes);
  final newList32 = fromBytes(bytes, 4);
  print(list32);
  print(newList32);
}

List<int> toBytes(List<int> list, int size) {
  final result = <int>[];
  for (var i = 0; i < list.length; i++) {
    final value = list[i];
    for (var j = 0; j < size; j++) {
      final byte = value >> (j * 8) & 0xff;
      result.add(byte);
    }
  }

  return result;
}

List<int> fromBytes(List<int> list, int size) {
  if (list.length % size != 0) {
    throw ArgumentError('Wrong size');
  }

  final result = <int>[];
  for (var i = 0; i < list.length; i += size) {
    var value = 0;
    for (var j = 0; j < size; j++) {
      var byte = list[i + j];
      final val = (byte & 0xff) << (j * 8);
      value |= val;
    }

    result.add(value);
  }

  return result;
}
[16, 32, 48, 64, 64, 48, 32, 16] [1076895760, 270544960] [1076895760, 270544960]