Flutter 字节操作

Flutter 字节操作

记录下字节的操作,建议在查看数据的时候,将数据转为十六进制查看,

  1. 将字符串转为 十六进制 或者 十进制数组 ( 根据个人需求 ctrl + c)
	String str = "abcdefj";
	String res = "";
	// 转为十六进制字符串
	for( int i = 0;i< str.length; i++ ) {
		res = res + str.codeUintAt(i).toRadixString(16);
	}
	var leng = (res.length / 2).round();
	String data = "dc" + "06dc" + res;
	var hex = "";
	// 加 3 ,因为我在 data 前添加 dc06dc
	List buffer = List<dynamic>.filled(leng + 3, 0 , growable: true);
	for( int i=0;i<data.length;i++ ) {
		hex = hex + data[i];
		if((i + 1) % 2 == 0) {
			// 10 转为十进制 16转为16进制
			var item = int.parse(hex, radix: 16).toRadixString(10); 
			buffer[(i / 2).round()] = int.parse(item);
			hex = "";
		}
	}
	List buf = buffer.sublist(1);
	print(buf);
  1. 十进制数组 转为 Uint8List (根据个人需求 ctrl + c)
	List<int> list = [ 00, 02, 00, 00, 02,06 ];
	int leng = list.length;
	ByteData bdata = ByteData(leng + 2);
	var id = ByteData.view(bdata.buffer, 0, 1);
	id.setUint8(0, 0x7d);
	var code = ByteData.view(bdata.buffer, leng + 1 , 1);
	code.setUint8(0, 0x7d);
	var body = ByteData.view(bdata.buffer, 1, leng);
	for( int i = 0;i< leng; i++) {
		body.setUint8(i, bytes[i]);
	}
	var buf = Uint8List.view(body.buffer);
  1. 同后一字节异或
	int str = 0;
	List<int> data = [ 00, 02, 00, 00, 02,06 ];
	List<int> BCC = [0];
	for(int i = 0;i< data.length;i++) {
		BCC[0] = BCC[0] ^ data[i];
	}
	String hex = (BCC[0] & oxff).toString();
	if(hex.length == 1) {
		hex = "0" + hex;
	}
	str = int.parse(hex);
	print(str);
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将 CameraImage 转换为 Flutter 中用于显示的图像,需要使用 ImageConverter 将其转换为 Uint8List,并使用 decodeImage 将其解码为 Image。以下是一个示例代码片段,展示了如何使用 decodeImage 操作 CameraImage: ```dart import 'dart:typed_data'; import 'package:flutter/material.dart'; import 'package:camera/camera.dart'; import 'package:image/image.dart' as Img; class CameraPreviewWidget extends StatelessWidget { final CameraImage image; const CameraPreviewWidget({ Key key, @required this.image, }) : super(key: key); @override Widget build(BuildContext context) { final Image img = Image.memory( Uint8List.view( image.planes[0].bytes.buffer, image.planes[0].bytes.offsetInBytes, image.planes[0].bytes.length, ), ); return img; } Future<Img.Image> convertCameraImage(CameraImage image) async { final int width = image.width; final int height = image.height; final Uint8List bytes = _concatenatePlanes(image.planes); return Img.decodeImage(bytes); } Uint8List _concatenatePlanes(List<Plane> planes) { final Completer<List<Uint8List>> completer = Completer<List<Uint8List>>(); final List<Uint8List> bytesList = <Uint8List>[]; int bytes = 0; for (int i = 0; i < planes.length; i++) { bytes += planes[i].bytes.length; bytesList.add(planes[i].bytes); } final Uint8List concatenatedBytes = Uint8List(bytes); int index = 0; for (int i = 0; i < planes.length; i++) { concatenatedBytes.setRange(index, index + planes[i].bytes.length, planes[i].bytes); index += planes[i].bytes.length; } return concatenatedBytes; } } ``` 在这个示例中,我们首先使用一个 Uint8List.view 将 CameraImage 中的字节拼接在一起,然后使用 decodeImage 将其解码为 Image。注意,在上面的代码中,我们使用了一个名为 _concatenatePlanes 的辅助函数,将不同平面的字节拼接在一起。 希望这可以帮助你解决问题!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值