You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中如何将普通整型转换为带0x前缀的十六进制整型用于BLE通信

核心认知澄清

  • 0x 只是Dart中十六进制整型字面量的表示符号,本身不属于整型值的组成部分。0x41 和十进制的65是完全相等的同一个int值,内存存储、发送给BLE设备的字节内容没有任何差异,打印时显示的是41还是65只是输出进制格式的区别,不会影响设备识别。
  • 你当前拿到的int类型41是十进制数值,对应ASCII码为(,自然无法被设备识别为A,问题根源是字符转字节的逻辑错误,不需要给整型值加0x前缀。

正确实现方案

你只需要将输入的字符正确转换为对应的ASCII/UTF-8字节,直接传给flutter_blue的写特征方法即可。

单字符转字节发送示例

// 输入字符
String input = 'A';
// 取字符对应的ASCII编码值
int byte = input.codeUnitAt(0);
// 此时byte值为十进制65,等价于十六进制字面量0x41,可直接发送
// 调试时转十六进制字符串输出可得到41
print(byte.toRadixString(16)); 

调用flutter_blue写特征完整示例

flutter_blue的写特征方法要求传入Uint8List类型的字节列表,直接传入转换后的字节即可:

import 'dart:convert';
import 'package:flutter_blue/flutter_blue.dart';

// 要发送的字符串
String sendStr = "Hello BLE";
// 转成字节列表
List<int> dataBytes = utf8.encode(sendStr);
// 调用写特征方法
await characteristic.write(dataBytes, withoutResponse: false);

手动指定十六进制值发送

如果你需要直接发送指定十六进制值,直接用Dart的十六进制字面量写法即可:

// 直接定义十六进制值,和写十进制65完全等价
int targetByte = 0x41;
await characteristic.write([targetByte], withoutResponse: false);

调试显示带0x前缀的方法

如果仅需要在打印、UI显示时展示带0x的格式,做字符串格式化即可,不会影响实际发送的数值:

int byte = 65;
String showStr = "0x${byte.toRadixString(16).padLeft(2, '0')}";
print(showStr); // 输出:0x41

内容的提问来源于stack exchange,提问作者Hnin Nwe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 19:24:03