Ich lese Daten von einer seriellen Schnittstelle in eine Linux-Box ueipac 600-1G mit VxWorks ein. Ich soll String-Daten einlesen. Wenn ich jedoch eine Zeichenkette einsende, habe ich zum Testen "this is a test" verwendet, meine Log-Datei lautet "this is a test¤ -p". Ich habe meinen Code geändert, um die hexadezimalen Werte zu lesen, und habe "74 68 69 73 20 69 73 20 61 20 74 65 73 74 0a" bekommen, was beim Einstecken in einen Hex-Konverter "dies ist ein Test" lautet.Serielle Schnittstelle Lesen von VxWorks String-Konvertierung Kauderwelsch
Ich habe mehrere Tests mit verschiedenen Eingabezeichenfolgen durchgeführt und das Kauderwelsch ändert sich jedes Mal. Ich frage mich, wie ich dieses Kauderwelsch herausfiltern kann. Ich denke, es hat etwas damit zu tun, wie C Hex-Daten in Zeichenfolgen umwandelt, mit dem 0a-Zeichen.
mein Code als
void readandlog_serial(){
// read error throwing int
int n=0;
int bytes_counter=0;
int bytes=256; /*num of bytes to read at a time*/
int i=0; /* for the for loop*/
int bytes_written=0;
// hold the file descriptor
int fd=0;
/* dev name from iosDevShow output */
char dev_name[] = "/tyCo/0";
/* buffer to receive read */
char re[bytes];
/* length of string to read */
int re_len = bytes;
/* open the device for reading. */
fd = open("/tyCo/0", O_RDWR, 0);
outputfile=fopen ("LOGFILE.txt","a"); /* open output file*/
//check for open error
if(fd<0)
fprintf("outputfile","%s","\nerror opening file\n");
//while(n = read(fd, re, re_len)>0)
//bytes_counter=bytes_counter+n;
n = read(fd, re, re_len); /* read */
if(n<0)
fprintf("outputfile","%s","\nerror reading file\n");
close(fd); /* close */
for (i=0; i<n;++i){
bytes_written=bytes_written+(fprintf(outputfile," %02x", re[i]));
}
//fprintf(outputfile,"%c",'\n');
// pull only string data
//bytes_written=fprintf(outputfile,"%s",re); *****************************
fclose(outputfile);
printf("readandlog executed number of bytes written: %d\n",bytes_written);
}
folgt die for-Schleife wird auf Kommentar für die Zeichenfolge Lesen bauen, und die fprintf Linie mit dem astriks daneben wird für die Hex-Daten kommentiert ausgelesen baut.
Was denken Sie, 'fprintf (" outputfile "," ... ")' wird tun? Das führt nur zu * undefiniertem Verhalten *, wenn Sie einen Zeiger auf eine * Zeichenkette * und nicht die * Variable * 'Ausgabedatei 'übergeben. –
Wenn Sie nach dieser Codezeile fragen // bytes_written = fprintf (Ausgabedatei, "% s", re); Ich glaube nicht, dass Re ein Zeiger auf eine Zeichenfolge ist, ich denke, es ist eine Zeichenfolge. Also erwarte ich, dass es die Zeichenfolge in die Ausgabedatei druckt. Willst du sagen, wenn ich re instantiiere, sollte ich es als eine Zeichenfolge tun, so dass der '\ 0' Null-Terminator eingefügt wird? –
Er sagt, dass das erste Argument falsch ist. Ändern Sie 'fprintf (" Ausgabedatei "' in 'fprintf (Ausgabedatei). Sie haben zwei Zeilen, die dieses Problem haben. – user3386109