Vergleich zwischen unsigned int und unsigned char
Habe ich ein unsigned char-array, wie Data[2]
. Ich brauchte es zu vergleichen mit einer Ausgabe einer Funktion zurückgeben unsigned int.
habe ich versucht zu werfen Data[2]
in unsigned int und Umgekehrt. Es hat nicht funktioniert.
Was ich versuche zu tun ist:
if (Data[2] == ReadFlash2(40))
{
//Do Something.
}
ReadFlash2
ist eine Funktion zurückgeben unsigned int, während Data[2]
ist ein unsigned char.
Habe ich versucht zu casten jedem von Ihnen, aber es hat nicht funktioniert.
Gibt es etwas, was ich falsch mache? Welche soll ich gegossen, und auf was soll ich es umwandeln?
Dank.
Bearbeiten:
der code für die Readflash-Funktion:
unsigned int ReadFlash2(unsigned int Addr) //use as Read Function
{
pMem = (unsigned int*)MEM_STR_ADR;
pMem += Addr;
Nop();
return(*pMem);
}
- Was ist der Fehler, den Sie haben?
- die
if
Vergleich ist false, was bedeutet, es geht nicht durch. - Was ist der Wert von
Data[2]
und der Wert derReadFlash2(40)
? - Sind Sie sicher, dass die zahlen gleich sind?
- ja, in diesem Fall sind beide enthält
1
Data[2] = 1
undReadFlash(40)= 1
- das ist das, was debugger Ihnen gesagt? Oder denen sind Ihre eigenen Berechnungen?
- ich überprüfte jedes der Ausgänge separat. es ist aus dem debugger.
- Was " die definition der Daten Aussehen? Nur eine wilde Vermutung, aber arbeiten Sie an einem 16-bit-MCU und versucht zu vergleichen, das ganze zwei-element-array (nicht nur ein einzelnes element) auf die int?
- Hier ist ein Beispiel, das funktioniert: ideone.com/99b04Y Können Sie ein ähnlich einfaches Beispiel, das nicht funktioniert?
- was meinst du mit separat? Bitte geben Sie den code für die Funktion und die definition und Zuweisung für die
Data
array. Wenn beide Werte1
es egal, was für Datentypen das sind dieif
Aussage bewerten soll zutrue
. Wenn es ausgewertet wirdfalse
sollten Sie sich für den Fehler woanders. - es ist 32 bit PIC32MX795. die definition der Daten sieht wie folgt aus:
unsigned char Data[30];
- Es ist etwas anderes passiert. Können Sie reduzieren es auf ein SSCCE und posten Sie das? Ist es MPLAB X oder früher? Welcher compiler?
- ich habe gerade bearbeitet die Frage, gehören die ReadFlash2 Funktion.
- ich glaube, dass sonst nichts Los ist, weil, wenn ich entfernen Sie den Vergleich, funktioniert perfekt. ich habe auch geschickt, die zwei Werte an den host zu prüfen, und es ist das gleiche. also es zu tun haben, mit
type
. es ist MPLAB 8.89.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es scheint, dass Sie Zugriff auf flüchtigen Speicher des Microcontrollers, und dies könnte verursachen einige Verwirrung beim Debuggen. Versuchen Sie die Speicherung
Data[2]
undReadFlash(40)
in Variablen bevor der Vergleich:Nun sollten Sie in der Lage sein zu überprüfen, die tatsächlichen Werte werden verglichen, indem man die Werte in den Variablen.
ReadFlash2(40)
es ist1
, aber wenn ich Speichere in variable, es ist00
.unsigned long
. es arbeitete. danke Mann.Sollten Sie nicht brauchen, um Sie zu werfen auf alle die Regeln, die in C über implizite Aktionen sollte sich darum kümmern, dass für Sie.
In anderen Worten, beim Vergleich eines
unsigned char
zu einemunsigned int
zunächst die Förderung derunsigned char
kompatibel zu sein, dann tun, der Vergleich.Es ist alles drin in C99
6.3.1.8 Usual arithmetic conversions
die Staaten (nach der Diskussion von floating-point-Typen):... und so weiter, aber das im letzten Absatz oben ist das geltenden eine.
Wenn die Typen sind, wie Sie erklärt habe, und
Data[2]
eigentlich ist den gleichen Wert wie was zurückgegeben vonReadFlash2(40)
ist, dann ist es nicht eine C-Umgebung, zumindest nicht nach der Norm.close to C but not quite
🙂unsigned char
zuunsigned int
?