[英]Convert double to uint8_t*
我有一個接受 uint8_t* 的函數,它應該是一個字符串。 我想向這個函數發送一個雙精度值。 我已經嘗試過下面的代碼,但它不起作用。
double a = 10.98
uint8_t* p = (uint8_t*) &a;
printf("p: %u \n", p);
send_data(p);
但是下面的代碼有效,我想要的只是用雙變量 ABOVE 替換字符串“90”。
static const char *data[6];
data[0] = "90";
static uint8_t *test;
test = ( unsigned char *) data[dataCounter] ;
send_data(test);
所以我的意思是不起作用的是函數 send_data 應該通過藍牙將字符串發送到 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
)
“將雙精度作為字符串發送”可能意味着兩種不同的含義。 您可能的意思是“將 double 的實際現有字節作為字節數組發送”(換句話說,將 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);
這應該有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.