gpt4 book ai didi

将 double 转换为 uint8_t*

转载 作者:行者123 更新时间:2023-11-30 21:35:20 27 4
gpt4 key购买 nike

我有一个接受 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com