Конвертировать 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);

и это должно сработать.

Другие вопросы по тегам