2016-04-19 184 views
-5

我有一个函数接受uint8_t *,它应该是一个字符串。 我想发送一个双重函数。 我已经尝试了下面的这段代码,但它不起作用。将double转换为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 
) 
+0

你需要发布更多数据。你是什么意思“不起作用”?你在看什么,你有什么期望NG。 –

+2

你可能想阅读'sprintf()'。 C的基础知识,当你在这里。 – EOF

+0

@EOF:我的坏,错过了'*' –

回答

2

您可能通过“将双精度字符串发送”来表示两种不同的东西。您可能的意思是“将double的实际现有字节作为字节数组发送”(换句话说,将4.5发送为{0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x40}),或者您可能意思是“ 。送双的文本表示作为一个字符串(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)); 
0

的数据大小被限制为5个字节在该函数调用:ble_nus_string_send(&m_nus, data, 5),而double是8个字节长。将其更改为:

ble_nus_string_send(&m_nus, data, 8); 

这应该起作用。

+0

你没有提供答案 –

+0

@Sumama Waheed:其实,我做到了。 – shrike