gpt4 book ai didi

flutter - 将 32 位整数写入文件?

转载 作者:行者123 更新时间:2023-12-02 16:51:51 24 4
gpt4 key购买 nike

我有一个 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)
}

Future _localFile(String filename) async {
final path = await _localPath();
return File('$path/$filename');
}

Future _localPath() async {
final directory = await getApplicationDocumentsDirectory();
return directory.path;
}

当我从该文件读回数据时,我注意到它是无符号 8 位整数。 (值介于 0 到 255 之间)

下面是读取数据脚本:

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

附注

如果需要这样的检查,您可以为这两种方法添加溢出检查来检查数据的正确性。

关于flutter - 将 32 位整数写入文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59447357/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com