ESP32 Arduino IDE下BLE notify回调uint8_t*类型pData十六进制打印问题
ESP32 BLE Notify回调全量十六进制数据打印修改方案
原代码仅打印第一个字节的原因是*pData 仅获取了指针指向的首个uint8_t元素,你需要循环遍历length长度的所有数据字节逐个打印即可,修改后的代码如下:
static void notifyCallback( BLERemoteCharacteristic* pBLERemoteCharacteristic, uint8_t* pData, size_t length, bool isNotify) { Serial.print("data length: "); Serial.println(length); Serial.print("data: "); // 循环遍历所有接收字节 for (size_t i = 0; i < length; i++) { // 不足两位的十六进制数前面补0,格式更统一 if (pData[i] < 0x10) { Serial.print("0"); } Serial.print(pData[i], HEX); // 字节之间加空格分隔,可读性更好,不需要可以删除此行 Serial.print(" "); } Serial.println(); }
如果不需要补0和空格分隔的最简修改版本如下:
static void notifyCallback( BLERemoteCharacteristic* pBLERemoteCharacteristic, uint8_t* pData, size_t length, bool isNotify) { Serial.print("data length: "); Serial.println(length); Serial.print("data: "); for (size_t i = 0; i < length; i++) { Serial.print(pData[i], HEX); } Serial.println(); }
内容的提问来源于stack exchange,提问作者황영진
相关产品推荐
相关产品推荐

