Zahl als 12 Bit speichern
-
ich lese einen Wert über ein Edit ein. Der Bereich liegt von 0 bis 2,5 Volt. Dieser soll als 12 Bit Zahl in 2 Byte gespeichert werden. Im höheren Byte sind nur die unteren 4 Bits zu verwenden (0x00 bis 0x0F). Wie leg ich die Werte in die 2 Byte. Ich brauch die beiden Bytes, da ich sie getrennt an die RS232 sende.
int amplitude = StrToFloat(txtEingabeAmplitude->Text) * 4096/2.5; Label4->Caption = amplitude; char send[] = {'9',amplitude, amplitude/0xFF}; serialInterface.SendData(send,3);
Wie trenn ich nun den Wert amplitude auf die beiden Bytes auf? Was haltet ihr von meinem Code? Oder kann man das besser machen?
-
Ungefähr so
char high = (amplitude & 0xf00) >> 8; char low = amplitude & 0xff; std::string send = "9"; send += high; send += low; serialInterface.SendData(send.c_str(), send.length());
rudpower schrieb:
Was haltet ihr von meinem Code? Oder kann man das besser machen?
z.B. erstmal prüfen, ob in txtEingabeAmplitude->Text wirklich eine Zahl steht ?
Das
amplitude/0xFF
sieht auch etwas suspekt aus, auch wenn es in dem Fall wohl das gleiche wie ein bitweises Und macht.
-
z.B. erstmal prüfen, ob in txtEingabeAmplitude->Text wirklich eine Zahl steht ?
Das brauch ich in diesem Fall nicht, da ich eine Komponente (LMDTools) verwende, bei der man das Eingabeformat über eine Eigenschaft festlegen kann. So kann man nur Floats eingeben.