Flutter Dart中如何转换十六进制格式并将值写入ByteData对象
Dart 十六进制转换及ByteData赋值方案
1. 十六进制值转换
你写的var i=23FF在Dart中不是合法语法,Dart的十六进制字面量必须以0x前缀开头。如果你的原始值是字符串格式的23FF,可以按以下方式转换:
- 字符串转十六进制数值
用int.parse指定进制为16即可,转换后得到的int值和直接写0x23FF完全等价:String rawHex = "23FF"; int i = int.parse(rawHex, radix: 16); // 等价于 int i = 0x23FF; - 数值转
0x开头的十六进制字符串(仅需显示时使用)String hexStr = "0x${i.toRadixString(16).toUpperCase()}"; // 输出结果为 0x23FF
2. 给ByteData设置十六进制值
你给出的示例写法本身就是合法可用的:Dart中0x开头的十六进制字面量本身就是标准int类型,可以直接传入setUint8/setUint16/setUint32等方法的参数中。
如果是之前转换得到的十六进制数值,也可以直接传入,完整示例如下:
// 转换得到十六进制数值 String rawHex = "23FF"; int hexValue = int.parse(rawHex, radix: 16); // 初始化ByteData ByteData mssg = ByteData(12); // 直接传入十六进制数值即可,第三个可选参数指定端序,默认是大端Endian.big mssg.setUint16(5, hexValue); // 小端序写法示例 // mssg.setUint16(5, hexValue, Endian.little);
注意:赋值时要匹配方法的数值范围:uint8对应0x000xFF,uint16对应0x00000xFFFF,uint32对应0x00000000~0xFFFFFFFF,超出范围会抛出异常。
内容的提问来源于stack exchange,提问作者preeti
相关产品推荐
相关产品推荐

