簡體   English   中英

將 double 轉換為 uint8_t*

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM