我RX获得:【hex】
69 74 61 7A 00 1B 01 00 01 00 00
其实是格式报文:
typedef struct _bleModuleReceiveCmd
{
uint8_t class[4];
uint16_t command;
uint8_t response;
uint16_t length;
uint8_t data[250];
uint8_t crc;
uint8_t cnt;
uint8_t pos;
uint8_t flag;
}bleModuleReceiveCmdType;
分析:uint8_t *rxdata就是过来的上面的报文 newrxdata是我要分析后的输出!
static uint8_t ble_Analysis_Rxdata( uint8_t *rxdata,uint8_t *newrxdata)
{
uint8_t idx =0;
bleModuleReceiveCmdType *rx=(bleModuleReceiveCmdType *)rxdata;
//为什么这里使用强转技巧 失败 必须自己手工算?
printf("%d--WHY WRONG?\r\n",rx->command);//6912
printf("%d--\r\n",rx->response);//1
printf("%d--\r\n",rx->length);//1
printf("%d--\r\n",rx->data[0]);//0
printf("%d--\r\n",rx->crc);//0
//DIY
rx->command = rxdata[4]<<8 |rxdata[5];
printf("%d--",rx->command);//27
//实体
bleModuleReceiveCmdType rxd;
memcpy(&rxd,rxdata,sizeof(bleModuleReceiveCmdType));
printf("%d--WHY WRONG?\r\n",rxd.command);//27-----其实del前面的也是0X1B00
printf("%d--\r\n",rxd.response);//1
printf("%d--\r\n",rxd.length);//1
printf("%d--\r\n",rxd.data[0]);//0
printf("%d--\r\n",rxd.crc);//0
//////可以看到 指针失败!!!实例结构体的话成功!因为memcpy!!!
具体是啥道理???
【6912】===【0x1B00】看来是对的 !!错误的是字节序啊!!!!!
另外一个修改思路:
static uint8_t ble_Analysis_Rxdata( bleModuleReceiveCmdType *rxdata,uint8_t *newrxdata)
其实也是一样的 问题就是!!字节序!!!!