2016-04-19 13 views
-5

Ich habe eine Funktion, die uint8_t * akzeptiert, die eine Zeichenfolge sein soll. Ich möchte ein Double zu dieser Funktion senden. Ich habe diesen Code unten versucht, aber es funktioniert nicht.Convert double to uint8_t *

Aber dieser Code unten funktioniert, alles was ich will, ist die Zeichenfolge "90" durch eine doppelte Variable OBEN zu ersetzen.

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

Was meine ich nicht funktioniert ist, dass die Funktion send_data soll eine Schnur über Bluetooth mit einem Android-Handy senden. Wenn ich es wie den ersten Beispielcode mache, wird die Zeichenfolge korrekt übergeben.

Hinweis: Ich denke, es ist möglicherweise wegen der Unterschied in Datentypen, die an das zweite Argument übergeben wird. Die Funktion erwartet 3 Argumente.

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

Dies ist die Funktion defintion:

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

Sie müssen mehr Daten schreiben Was meinst du mit „funktioniert nicht“? Was siehst du, was erwartest du? ng. –

+2

Sie möchten vielleicht über 'sprintf()' lesen. Und die Grundlagen von C, während du dabei bist. – EOF

+0

@EOF: Meine schlechte, verpasste die '*' –

Antwort

2

Es gibt zwei verschiedene Dinge, die Sie vielleicht meinen, indem Sie das Double als String senden. Sie könnten "die tatsächlich vorhandenen Bytes des Double als Array von Bytes senden" (mit anderen Worten, senden Sie 4.5 als {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x40}), oder Sie könnten " . Bitte senden Sie eine Textdarstellung des Doppel als String (IOW, senden 4.5 als „4.5“) der erste Fall wäre:

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

Dies ist wahrscheinlich nicht das, was Sie wollen, da die App Sie senden zu Most es ist die gleiche Art und Weise, mit der gleichen Endian, gleiche Floating-Point-Darstellung erwarten sein, usw. Sie wollen wahrscheinlich den zweiten Fall.

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

Die Datengröße bis 5 Bytes in diesem Funktionsaufruf begrenzt ist: ble_nus_string_send(&m_nus, data, 5), während ein double 8 Bytes lang ist. Ändern Sie dies zu:

ble_nus_string_send(&m_nus, data, 8); 

und dies sollte funktionieren.

+0

Sie haben keine Antwort zur Verfügung gestellt –

+0

@Sumama Waheed: eigentlich habe ich. – shrike