STM32WB55发送BLE特征值:Android端如何转十进制显示?
解决STM32WB55 BLE自定义特征值Android端显示十进制的问题
BLE特征值传输的是原始字节流,Android端默认会把这些字节以十六进制形式展示(比如收到字节0x0A,显示为"0A"),你需要的是将其转换为对应的十进制数值,以下是两种直接可行的解决方案:
方案1:STM32端发送ASCII格式的十进制字符串
直接把要发送的十进制数值转换成ASCII字符串,Android端收到后可直接显示。比如要发送十进制123,转换为字符串"123"后传入发送函数:
// 示例:发送十进制123 uint8_t dec_str[] = "123"; Custom_STM_App_Update_Char(CUSTOM_STM_CHAR, dec_str);
这种方式无需Android端额外解析,但要确保特征值的长度足够容纳字符串(包括结束符)。
方案2:Android端解析原始字节为十进制数值
如果保持STM32发送原始数值(比如发送uint8_t类型的123,即字节0x7B),Android端需根据数值类型解析:
- 若为单字节无符号整数(
uint8_t):byte[] receivedBytes = characteristic.getValue(); if (receivedBytes != null && receivedBytes.length > 0) { int decimalValue = receivedBytes[0] & 0xFF; // 规避字节转int时的负数问题 String displayText = String.valueOf(decimalValue); // 将displayText更新到UI显示 } - 若为多字节整数(如
int16_t、uint32_t),需匹配STM32的小端字节序:
比如发送int16_t类型的1234(对应0x04D2),STM32会发送字节0xD2、0x04,Android端解析代码:byte[] receivedBytes = characteristic.getValue(); if (receivedBytes != null && receivedBytes.length >= 2) { int decimalValue = ((receivedBytes[1] & 0xFF) << 8) | (receivedBytes[0] & 0xFF); String displayText = String.valueOf(decimalValue); // 将displayText更新到UI显示 }
关键注意点
- 必须在STM32和Android端预先约定好数值的类型(位数、有符号/无符号)和字节序,避免解析偏差。
- 若采用方案1,特征值属性可设置为支持可读的字符串类型(自定义特征直接传ASCII串也可正常工作)。
内容的提问来源于stack exchange,提问作者Newbie
相关产品推荐
相关产品推荐

