将 double 转换为 uint8_t*

标签 c casting double uint8t

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

相关文章:

python 到 c 的过渡

c - 将 double 值添加到无符号 64 位值会产生奇怪的结果

ios - 在 Swift 中将 Double 转换为 NSNumber 会失去准确性

c - 如何从double中获取绝对值-c语言

java - List<?> 将整数转换为 List<Double>,为什么这可能?

c - 在 Linux 下,如何以编程方式检查给定 NIC 是否支持传输时间戳?

c - C中的unsigned int和signed int有什么区别?

c - 斐波那契数列的完美平方?

c# - 为什么转换为一个字节然后立即返回一个 int?

c - 将数组转换为结构时的数据顺序