将双精度转换为 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);
但是下面这段代码有效,我只想用上面的双变量替换字符串“90”。
static const char *data[6];
data[0] = "90";
static uint8_t *test;
test = ( unsigned char *) data[dataCounter] ;
send_data(test);
所以我所说的不起作用的意思是函数 send_data 应该通过蓝牙将字符串发送到 android phone。如果我像第一个示例代码那样做,字符串就会正确传递。
注意:我认为这可能是因为传递给第二个参数的数据类型不同。该函数需要 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
)
此函数调用中的数据大小限制为 5 个字节:ble_nus_string_send(&m_nus, data, 5)
,而 double
的长度为 8 个字节。将其更改为:
ble_nus_string_send(&m_nus, data, 8);
这应该有效。
"sending the double as a string" 可能有两种不同的含义。您可能是指 "send the actual existing bytes of the double as an array of bytes"(换句话说,发送 4.5 作为 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x40}),或者您可能是指 "send a textual representation of the double as a string (IOW, send 4.5 as "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));
我有一个接受 uint8_t* 的函数,它应该是一个字符串。 我想向这个函数发送一个双精度值。 我试过下面这段代码,但它不起作用。
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 phone。如果我像第一个示例代码那样做,字符串就会正确传递。
注意:我认为这可能是因为传递给第二个参数的数据类型不同。该函数需要 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
)
此函数调用中的数据大小限制为 5 个字节:ble_nus_string_send(&m_nus, data, 5)
,而 double
的长度为 8 个字节。将其更改为:
ble_nus_string_send(&m_nus, data, 8);
这应该有效。
"sending the double as a string" 可能有两种不同的含义。您可能是指 "send the actual existing bytes of the double as an array of bytes"(换句话说,发送 4.5 作为 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x40}),或者您可能是指 "send a textual representation of the double as a string (IOW, send 4.5 as "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));