Конвертировать double в uint8_t*
У меня есть функция, которая принимает uint8_t*, которая должна быть строкой. Я хочу отправить двойную функцию. Я попробовал этот код ниже, но он не работает.
double a = 10.98
uint8_t* p = (uint8_t*) &a;
printf("p: %u \n", p);
send_data(p);
Но этот код ниже работает, все, что я хочу, это заменить строку "90" двойной переменной ABOVE.
static const char *data[6];
data[0] = "90";
static uint8_t *test;
test = ( unsigned char *) data[dataCounter] ;
send_data(test);
То, что я имею в виду, не работает, так это то, что функция send_data должна отправлять строку по Bluetooth на телефон Android. Если я делаю это, как в первом примере кода, строка передается правильно.
Примечание. Я думаю, что это возможно из-за различий в типах данных, передаваемых второму аргументу. Функция ожидает 3 аргумента.
static uint32_t send_data(uint8_t data[]){
return ble_nus_string_send(&m_nus, data, 5);
}
Это определение функции:
uint32_t ble_nus_string_send (ble_nus_t * p_nus,uint8_t * p_string,
uint16_t length
)
2 ответа
Есть две разные вещи, которые вы могли бы иметь в виду, "посылая двойной как строку". Вы могли бы иметь в виду "отправить фактические существующие байты двойного числа в виде массива байтов" (другими словами, отправить 4,5 как {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x40}), или вы могли бы иметь в виду " отправьте текстовое представление double в виде строки (IOW, отправьте 4.5 как "4.5"). Первый случай будет:
double d = 4.5;
ble_nus_string_send(&m_nus, (uint8_t *)(&d), 8);
Вероятно, это не то, что вам нужно, поскольку приложение, в которое вы отправляете, должно ожидать его таким же образом, с тем же порядком байтов, тем же представлением с плавающей запятой и т. Д. Возможно, вам нужен второй случай:
double d = 4.5;
char temp[20];
snprintf(temp, 20, "%g", d);
ble_nus_string_send(&m_nus, (uint8_t *)temp, strlen(temp));
Размер данных ограничен 5 байтами в этом вызове функции: ble_nus_string_send(&m_nus, data, 5)
в то время как double
длиной 8 байт. Измените это на:
ble_nus_string_send(&m_nus, data, 8);
и это должно сработать.