在C ++中读取原始字节数据

时间:2019-04-18 13:49:10

标签: c++ c

我有一个非常基本的问题。我想根据Nrf52 BLE设备接收到的BLE数据来打开/关闭LED。我的问题是数据(Received_Data)的格式为原始字节数据格式(1字节),我不知道如何执行if语句,或者将其转换为可以的形式。 在下面的代码中,我有:

                if (Received_Data > 50)
                    {
                      nrf_gpio_pin_toggle(LED_2);
                    }
                 end

如何在这样的IF语句中使用'Received_Data',以便可以将其读取为整数或十六进制数字?

        case APP_UART_DATA_READY:
        UNUSED_VARIABLE(app_uart_get(&data_array[index]));
        index++;

        if ((data_array[index - 1] == '\n') ||
            (data_array[index - 1] == '\r') ||
            (index >= m_ble_nus_max_data_len))
        {
            if (index > 1)
            {
                NRF_LOG_DEBUG("Ready to send data over BLE NUS");
                NRF_LOG_HEXDUMP_DEBUG(Received_Data, index);

                 if (Received_Data > 50)
                    {
                      nrf_gpio_pin_toggle(LED_2);
                    }
                 end

这是我的头脑。我确定有人可以在5秒内回答。而且我无法花时间去浏览所有相关的C ++文档以找到解决方案。

2 个答案:

答案 0 :(得分:0)

由于Received_Data是一个uint8_t数组,因此您可以直接访问各个字节:

if (Received_Data[0] > 50)
//or
if (Received_Data[index] > 50)

uint8_t为[0..255]。

答案 1 :(得分:0)

根据您的问题

  

如何在这样的IF语句中使用'Received_Data',所以   它可以读取为整数还是十六进制数字?

根据您的评论

  

已将其定义为uint8:uint8_t   Received_Data [BLE_NUS_MAX_DATA_LEN];

     

只需要检查数组中的字节是在a之上还是之下   某个阈值,例如50。这样做的语法是什么   带有IF语句?

Received_Data是无符号8位整数的数组。在您提供的第一段代码中:

if (Received_Data > 50){
    nrf_gpio_pin_toggle(LED_2);
}

Received_Data衰减为指向数组第一个元素的指针。因此,您实际上是在指针和整数(ISO C ++明确禁止)之间进行比较。如果要检查该数组的特定元素的值,则需要使用下标运算符对其进行索引,如下所示:

//byte_of_interest is some non-negative integer value that specifically represents
//the element in the array that you are interested in comparing with 50
if (Received_Data[byte_of_interest] > 50){
    nrf_gpio_pin_toggle(LED_2);
}

同样,您也可以使用指针算法:

//byte_of_interest is an offset from the beginning of the array
//so its contents are located at the address to the beginning of the array + the offset
if (*(Received_Data + byte_of_interest) > 50){
    nrf_gpio_pin_toggle(LED_2);
}

此外,我建议您将数组初始化为0,以防止在填充数组之前得到误报(例如uint8_t Received_Data[BLE_NUS_MAX_DATA_LEN] = {0};