So nun möchte ich aber noch die Adresse da einfügen. Dafür lesen ich
diesen String aus einer MYSQL "0x34, 0x38, 0x40"
Wie bekomme ich das nun zusammen? Ich habe es versucht mit sprinf aber
dann geht das write nicht mehr richtig :-(
Und wie kann ich dynamisch die Sende länge einstellen?
Ich bin irgendwie gerade überfrag. Könnte mir wer einen Tip geben?
Lars
Lars schrieb:> Könnte mir wer einen Tip geben?
1. Mein Tip: verständliche Fragen stellen.
Ich zumindest weiß nicht recht, was du willst und was nicht geht.
2. man kann write auch mehrfach hintereinander aufrufen, um erst einen
Teil zu senden und dann den anderen.
3. Rückgabewerte sind dazu da, geprüft zu werden.
Also ich habe das Problem mit dem String der aus der MYSQL Datenbank
kommt.
Wie bekomme ich den gesendet?
Der String sieht ja so aus:
MYSQL Adresse:
0x34, 0x38, 0x40
Und diesen String will ich in den Vorhandenen
unsigned char send_bytes[] = { 0x2F, 0x3F, 0x21, 0x0D, 0x0A};
einbinden.
Also so soll es nachher aussehn:
->0x2F, 0x3F, 0x34, 0x38, 0x40, 0x21, 0x0D, 0x0A
Habs per sprint versucht aber dann wird gemeckert das send_bytes keine
größen angabe hat.
Wenn ich dann send_bytes[100] schreibe, sender write meine Daten nicht
mehr
:-(
Ok werde ich mal googlen...
Was ich noch so verstehe ist, warum sind die 0x.. sind der {} klammer?
unsigned char send_bytes[] = { 0x2F, 0x3F, 0x21, 0x0D, 0x0A};
Ich habe das kopiert..... Finde da aber auch nix im Netz.
In send_bytes[] hast du Binärwerte.
Dein SQL-String besteht aus einzelnen Zeichen.
Das soviel miteinander zu tun wie 10 mit "zehn"
Du musst also erstmal aus dem String Binärwerte machen.
Am einfachsten geht das mit sscanf (wurde schon genannt).
Dann kannst du die ersten zwei Zeichen von send_bytes senden,
dann die Werte die du mit scanf ermittelt hast und danach die letzten
Zeichen von send_bytes. (wurde auch schon genannt)
Du kannst auch in send_bytes Füllzeichen einbauen und die Stellen dann
entsprechen füllen.
Sollen die SQL-Daten immer nach dem zweiten Byte von send_bytes
eingefügt werden?
Wenn ja, mach's doch einfach so:
1
charsql_string[]="0x34, 0x38, 0x40";
2
3
intsendenserial(intfd)
4
{
5
staticunsignedcharprefix[]={0x2F,0x3F};
6
staticunsignedcharsuffix[]={0x21,0x0D,0x0A};
7
char*sql_ptr=sql_string;
8
unsignedcharc;
9
intval,n;
10
11
write(fd,prefix,sizeofprefix);
12
13
if(sscanf(sql_ptr,"%i%n",&val,&n)==1){
14
do{
15
sql_ptr+=n;
16
c=(unsignedchar)val;
17
write(fd,&c,1);
18
19
}while(sscanf(sql_ptr,",%i%n",&val,&n)==1);
20
}
21
22
write(fd,suffix,sizeofsuffix);
23
24
return0;
25
}
Erst werden die Bytes 0x2f und 0x3f gesendet.
Dann wird der SQL-String mit sscanf auseinandergeflückt und jedes
einzelne darin enthaltene Byte gesendet. Dabei ist die Anzahl dieser
Bytes beliebig.
Am Schluss werden die Bytes 0x21, 0x0d und 0x0a gesendet.
Ist es das, was du dir vorgestellt hast?
Lars schrieb:> Was ich noch so verstehe ist, warum sind die 0x.. sind der {} klammer?>> unsigned char send_bytes[] = { 0x2F, 0x3F, 0x21, 0x0D, 0x0A};
Damit initialisierst du das Array send_bytes.
Dies geht so in C nur bei der Definition von einem Array.
Du kannst auch einen Wert in die [] setzen. Dann wird der Rest
automatisch mit 0 aufgefüllt.
1
unsignedcharsend_bytes[10]={0x2F,0x3F,0x21,0x0D,0x0A};// nur 5 Werte angegeben, die restlichen fünf werden mit 0 gefüllt