专栏首页个人路线encoding - 如何将 Dart 的ByteData转换为字符串?
原创

encoding - 如何将 Dart 的ByteData转换为字符串?

encoding - 如何将 Dart 的ByteData转换为字符串?

我正在读取一个二进制文件,并希望将其转换为字符串。如何在Dart中完成?

**最佳答案**

尝试以下

String getStringFromBytes(ByteData data) {

  final buffer = data.buffer;

  var list = buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);

  return utf8.decode(list);

}

ByteData 是一个抽象:

一个固定长度的随机访问字节序列,它还提供对这些字节表示的固定宽度整数和浮点数的随机和未对齐访问。

正如 Gunter 在评论中提到的,您可以使用File.writeAsBytes. 但是,它确实需要一些 API 工作才能从ByteDataList<int>

import 'dart:async';

import 'dart:io';

import 'dart:typed\_data';



Future<void> writeToFile(ByteData data, String path) {

  final buffer = data.buffer;

  return new File(path).writeAsBytes(

      buffer.asUint8List(data.offsetInBytes, data.lengthInBytes));

你需要安装path_provider包,然后

这应该工作:

import 'dart:async';

import 'dart:io';

import 'dart:typed\_data';

import 'package:path\_provider/path\_provider.dart';



final dbBytes = await rootBundle.load('assets/file'); // <= your ByteData



//=======================

Future<File> writeToFile(ByteData data) async {

    final buffer = data.buffer;

    Directory tempDir = await getTemporaryDirectory();

    String tempPath = tempDir.path;

    var filePath = tempPath + '/file\_01.tmp'; // file\_01.tmp is dump file, can be anything

    return new File(filePath).writeAsBytes(

        buffer.asUint8List(data.offsetInBytes, data.lengthInBytes));

}

//======================

获取您的文件:

var file;

try {

    file = await writeToFile(dbBytes); // <= returns File

} catch(e) {

    // catch errors here

}

如何转换ByteDataList<int>

经过自我调查,解决方案是:

  1. .cast<int>()
ByteData audioByteData = await rootBundle.load(audioAssetsFullPath);

Uint8List audioUint8List = audioByteData.buffer.asUint8List(audioByteData.offsetInBytes, audioByteData.lengthInBytes);

List<int> audioListInt = audioUint8List.cast<int>();

或 2. 使用 .map

ByteData audioByteData = await rootBundle.load(audioAssetsFullPath);

Uint8List audioUint8List = audioByteData.buffer.asUint8List(audioByteData.offsetInBytes, audioByteData.lengthInBytes);

List<int> audioListInt = audioUint8List.map((eachUint8) => eachUint8.toInt()).toList();

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 字符串转换整数python_将Python字符串转换为Int:如何在Python中将字符串转换为整数

    Unlike many other programming languages out there, Python does not implicitly ty...

    用户7886150
  • 字符串转换整数python_将Python字符串转换为Int:如何在Python中将字符串转换为整数

    Unlike many other programming languages out there, Python does not implicitly ty...

    用户7886150
  • [译]Flutter Platform Channels(一)

    Flutter邀请你用Dart语言开发你的移动应用,一套代码可以同时构建Android和iOS。但是Dart不会编译成Android’s Dalvik字节码,在...

    JarvanMo
  • Flutter Chanel通信流程

    杨充
  • Flutter 安卓 Platform 与 Dart 端消息通信方式 Channel 源码解析

    本系列前面已经分析了 Flutter 的很多知识,这一篇我们来看下 Flutter 平台通信相关原理。Flutter 官方提供三种 Platform 与 Dar...

    工匠若水
  • Python 如何将字符串转为字典?

    这也就联想到,很多开发人员将表中的字段存储成字符串类型存储到MySQL数据表中,那么在从字段值到之后,势必要进行转化,这样更方便使用;

    SEian.G
  • JavaSE-将字符串转换为数字

    提示:仔细思考所有可能的输入情况。这个问题没有给出输入的限制,你需要自己考虑所有可能的情况。

    开源君
  • JavaSE-将字符串转换为数字

    提示:仔细思考所有可能的输入情况。这个问题没有给出输入的限制,你需要自己考虑所有可能的情况。

    开源君
  • [译]Flutter Platform Channels(二)

    Method channels是platform channels的一种,用于调用Dart和Java / Kotlin或Objective-C / Swift中...

    JarvanMo
  • Dart实战——Socks5服务器

    视频教程已上传B站,本篇将视频教程中的资料和代码进行了整理,可通过以下链接观看,注意结合本文档食用才更配哦

    arcticfox
  • python中将 \\uxxxx转换为 Unicode字符串

    今天碰到一个很有意思的问题,需要将普通的 Unicode字符串转换为 Unicode编码的字符串,如下:

    渔父歌
  • php 如何将image图片转化为字符串

    前两天研究php中的 imagick 扩展的时候,突发奇想实现的一个小功能感觉挺有意思,在这里记录一下:

    码缘
  • 41 - 将json字符串转换为类的实例

    若尘_
  • 42 - 将类的实例转换为json字符串

    若尘_
  • java数组转为字符串_join()和toString()方法 将数组转换为字符串

    join()方法将数组中所有的元素转化为字符串,并将这些字符串有逗号隔开合并成一个字符串作为方法的结果返回。如果调用时给定参数string,就将string作为...

    用户7886150
  • Dart和Java通信源码分析和实践

    Dart 和 Java 通信这块的知识点涵盖了 Dart&C 以及 Java&C 的通信,我们先有简单的业务组件的定义再到底层实现原理进行分,我们现在从Flut...

    静默加载
  • Go将数字转换为字符串的正确姿势

    在许多语言中,你可以轻松地将任何数据类型转换为字符串,只需将其与字符串连接,或者使用类型转换表达式即可。但是,如果你在Go中尝试执行似乎很明显的操作(例如将in...

    KevinYan
  • 有赞Flutter插件开发与发布

    随着 Flutter 生态越来越完善,以及 Flutter 在性能上的高光表现,越来越多的模块将会通过 Flutter 来进行实现。为了更方便的与原生工程进行对...

    有赞coder
  • c# 将字符串转换为指定类型的值

    冰封一夏

扫码关注云+社区

领取腾讯云代金券