c语言数据类型

在数据转换和指定协议发送数据的时候要注意数据的类型:

eg:

发送一个8bit的单字节数据而且这个数是带符号的:

0xA5 

10进制:165

2进制:10100101

串口接收后我们看见16进制数据是0xA5,rssi


下面是发送端数据:

if(deviceInfo->pEvtData[24] == 0x24) {
      if (deviceInfo->rssi) {
          rxBuf[0] = 0x55;  
          //Major
          rxBuf[1] = deviceInfo->pEvtData[25];
          rxBuf[2] = deviceInfo->pEvtData[26];
          //Minor
          rxBuf[3] = deviceInfo->pEvtData[27];
          rxBuf[4] = deviceInfo->pEvtData[28];
          //rssi
          rxBuf[5] = deviceInfo->rssi;
          //checksum
          rxBuf[6] = 0xFF;
      
          My_UART_WriteTransport(rxBuf, 7); }


typedef struct
{
  osal_event_hdr_t  hdr;    //!< GAP_MSG_EVENT and status
  uint8 opcode;             //!< GAP_DEVICE_INFO_EVENT
  uint8 eventType;          //!< Advertisement Type: @ref GAP_ADVERTISEMENT_REPORT_TYPE_DEFINES
  uint8 addrType;           //!< address type: @ref GAP_ADDR_TYPE_DEFINES
  uint8 addr[B_ADDR_LEN];   //!< Address of the advertisement or SCAN_RSP
  int8 rssi;                //!< Advertisement or SCAN_RSP RSSI
  uint8 dataLen;            //!< Length (in bytes) of the data field (evtData)
  uint8 *pEvtData;          //!< Data field of advertisement or SCAN_RSP
} gapDeviceInfoEvent_t;


可以看到rssi本身是一个char 类型的,所以是一个带符号数,所以在协议中约定:


在接收后我们按char 型接收打印可以看到,值位-91,如果按int 型或无符号型都是165,这是因为在计算机中整型按反码存储,最高位是符号位,1代表是负数,0是整数,

如果是int  10100101在最高位不是1, 所以不会是负数



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值