Flutter 字节操作
记录下字节的操作,建议在查看数据的时候,将数据转为十六进制查看,
- 将字符串转为 十六进制 或者 十进制数组 ( 根据个人需求
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);
- 十进制数组 转为 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);
- 同后一字节异或
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);