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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 14:17:09