2016-04-19 2 views
-5

J'ai une fonction qui accepte uint8_t * qui est censé être une chaîne. Je veux envoyer un double à cette fonction. J'ai essayé ce code ci-dessous, mais cela ne fonctionne pas.Convertir double en uint8_t *

double a = 10.98  
uint8_t* p = (uint8_t*) &a; 
printf("p: %u \n", p); 
send_data(p); 

Mais Ce code ci-dessous fonctionne, tout ce que je veux est de remplacer la chaîne « 90 » avec une variable double CI-DESSUS.

static const char *data[6]; 
data[0] = "90"; 
static uint8_t *test; 
test = (unsigned char *) data[dataCounter] ; 
send_data(test); 

Donc ce que je veux dire par ne fonctionne pas est que la fonction est censé send_data d'envoyer une chaîne via Bluetooth à un téléphone Android. Si je le fais comme le premier exemple de code, la chaîne est passée correctement.

Note: Je pense que c'est probablement à cause de la différence dans les types de données qui est passée au second argument. La fonction attend 3 arguments.

static uint32_t send_data(uint8_t data[]){ 
    return ble_nus_string_send(&m_nus, data, 5); 
} 

C'est la fonction défintion:

uint32_t ble_nus_string_send (ble_nus_t * p_nus,uint8_t * p_string, 
uint16_t length 
) 
+0

vous devez poster plus de données Que voulez-vous dire « ne fonctionne pas »? Que voyez-vous, que faites-vous? ng –

+2

Vous pourriez lire à propos de 'sprintf()'. Et les bases de C, pendant que vous y êtes. – EOF

+0

@EOF: Mon mauvais, raté le '*' –

Répondre

2

Il y a deux choses différentes que vous pourriez vouloir dire en "envoyant le double comme une chaîne". Vous pourriez vouloir dire "envoyer les octets existants du double comme un tableau d'octets" (en d'autres termes, envoyer 4.5 comme {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x40}), ou vous pourriez vouloir dire " . envoyer une représentation textuelle de la double sous forme de chaîne (OIEau, envoyer 4,5 comme « 4.5 ») le premier cas serait:

double d = 4.5; 
ble_nus_string_send(&m_nus, (uint8_t *)(&d), 8); 

Ceci est probablement pas ce que vous voulez, depuis l'application que vous envoyez à must être attendre la même façon, avec le même boutisme, même représentation à virgule flottante, etc. vous voulez sans doute le second cas.

double d = 4.5; 
char temp[20]; 
snprintf(temp, 20, "%g", d); 
ble_nus_string_send(&m_nus, (uint8_t *)temp, strlen(temp)); 
0

La taille des données est limitée à 5 octets dans cet appel de fonction: ble_nus_string_send(&m_nus, data, 5), tandis qu'un double est de 8 octets. Remplacez ceci par:

ble_nus_string_send(&m_nus, data, 8); 

et cela devrait fonctionner.

+0

vous n'avez pas fourni de réponse –

+0

@Sumama Waheed: en fait, je l'ai fait. – shrike