我有一个接受uint8_t *的函数,它应该是一个字符串。 我想向此函数发送一个double。 我在下面尝试过这段代码,但它没有用。
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应该通过蓝牙发送一个字符串到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
)
答案 0 :(得分: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));
答案 1 :(得分:0)
此函数调用中的数据大小限制为5个字节:ble_nus_string_send(&m_nus, data, 5)
,而double
长度为8个字节。将其更改为:
ble_nus_string_send(&m_nus, data, 8);
这应该有用。