Ich habe eine wirklich seltsame Widersprüchlichkeit.
Ich bereite mich auf das Lesen von Binärdateien auf Arduino (für einen Midi-Player, falls Sie interessiert waren). Wenn ich versuche, 4 Bytes auf Arduino zu einem langen zu kombinieren, gibt es mir ein falsches Ergebnis.
Wenn ich jedoch den entsprechenden Code auf dem PC verwende, bekomme ich den richtigen Wert.Convert 4 Byte zu lange auf Arduino Fehler
Eingabe ist: 0x12481248 (0x12, 0x48, 0x12, 0x48) (wirklich eine zufällige Zahl).
Arduino gibt: 4680.
Code :: Blocks gibt: 306713160.
4680 die gleiche wie 0x1248 ist, und das Ergebnis, das Sie erhalten, wenn Sie einen int statt lange auf Arduino (2 Byte verwenden weggelassen).
Arduino Code:
void setup(){
Serial.begin(57600);
char read1 = 0x12;
char read2 = 0x48;
char read3 = 0x12;
char read4 = 0x48;
unsigned long testint = read1<<24|read2<<16|read3<<8|read4;
unsigned long testint2 = 306713160;
Serial.println(testint);
Serial.println(testint2);
}
void loop(){}
testint2 ist es zu zeigen, dass es nicht durch Serial.println verursacht wird(). Serial Monitor-Ausgang ist in der Tat:
C++ Code:
#include <iostream>
using namespace std;
int main(){
char read1 = 0x12;
char read2 = 0x48;
char read3 = 0x12;
char read4 = 0x48;
unsigned long testint = read1<<24|read2<<16|read3<<8|read4;
cout << testint;
}
Jede Idee, was los ist?
Kennt jemand auch eine bessere/schönere Art der Konvertierung von Bytes mit Arduino/SD-Bibliothek?
prüfen endianness zur Compile-Zeit: http://codereview.stackexchange.com/questions/45675/checking-endianess-at-compile-time – Rabbid76