我有一个接受 uint8_t* 的函数,它应该是一个字符串。 我想向此函数发送一个 double 值。 我已经尝试过下面的代码,但它不起作用。
double a = 10.98
uint8_t* p = (uint8_t*) &a;
printf("p: %u \n", p);
send_data(p);
但是下面的代码可以工作,我想要的只是用上面的双变量替换字符串“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 作为字符串发送”可能意味着两种不同的含义。您可能的意思是“将 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));
关于将 double 转换为 uint8_t*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36730269/