Hallo Leute, Lese gerae per Modbus eine Kleinsteuerung aus. Laut Hersteller ist das Format Signed Short. Möchte jetzt aber in VB.net damit arbeiten. Irgendwie komme ich aber nie auf das richtige Ergebniss. 65136 Dezimal sollte danach nämlich -400 ergeben.
Ist das jetzt eigentlich Little Indian oder Big Indian? Kapier das unter Vb.net noch nicht so richtig. Dim d As Short d = 65136 MsgBox(Convert.ToInt32(d)) ...will nicht so richtig :-/
1 | // C99 Lösung I (int >= 32 Bit)
|
2 | |
3 | uint16_t val = 65136; |
4 | |
5 | int32_t val32 = val; |
6 | |
7 | if (val32 >= 32768) |
8 | val32 -= 65536; |
9 | |
10 | // C99 Lösung II (int >= 32 Bit)
|
11 | |
12 | uint16_t val = 65136; |
13 | |
14 | int32_t val32 = val; |
15 | |
16 | if (val32 & 32768) |
17 | val32 |= -32768; |
Übersetzen nach .net => Hausaufgabe.
Der Wert 0xfe70 ist ein vorzeichenbehafteter 16-Bit-Wert, dargestellt im Zweierkomplement. In C kann man das so "umrechnen":
1 | int16_t x = (int16_t) 0xfe70u; |
Oder, um es ohne Compiler nachvollziehen zu können: Windows-Taschenrechner aufrufen, auf "Programmierer" einstellen, "WORD" als Datentyp auswählen, auf Hex stellen, 0xfe70 eingeben, auf Dez stellen und ... -400 angezeigt bekommen.
> Der Wert 0xfe70 ist ein vorzeichenbehafteter 16-Bit-Wert, dargestellt im
Zweierkomplement.
Nee. Ob Vorzeichen behaftet laesst sich aufgrund der Hex Schreibweise
nicht bestimmen. Ich kann's mir als unsigned16 = Word, oder signed 16 =
Integer16 anschauen.
Sapperlot W. schrieb: > Nee. Ob Vorzeichen behaftet laesst sich aufgrund der Hex Schreibweise > nicht bestimmen. Lesen und Verstehen: Datn schrieb: > Irgendwie komme ich aber nie auf das richtige Ergebniss. > 65136 Dezimal sollte danach nämlich -400 ergeben.
Sapperlot W. schrieb: > Nee. Ob Vorzeichen behaftet laesst sich aufgrund der Hex Schreibweise > nicht bestimmen. Aha... Sowas kann aber auch nur von einem Informatiker kommen. Selbstweständlich geht das. Erstes Bit (in dem Falle also das ganz links stehende Bit in "F") gesetzt = negative Zahl. Was ist daran soooo schwer? Ein halbwegs tauglicher Programmierer sollte zumindest die Hex-Zahlen 0-F kennen und beherrschen.
Beitrag #5026059 wurde vom Autor gelöscht.
fft schrieb: > Selbstweständlich geht das. Erstes Bit (in dem Falle also das ganz links > stehende Bit in "F") gesetzt = negative Zahl. Was ist daran soooo > schwer? Bei einem uint32_t ist das ganz links stehende Bit kein Vorzeichenbit.
S. R. schrieb: > Bei einem uint32_t ist das ganz links stehende Bit kein Vorzeichenbit. Nochmal: Lesen und Verstehen: Datn schrieb: > Laut Hersteller ist das Format Signed Short. (Hervorhebung von mir)
Rufus Τ. F. schrieb: > S. R. schrieb: >> Bei einem uint32_t ist das ganz links stehende Bit kein Vorzeichenbit. > > Nochmal: Lesen und Verstehen: > > Datn schrieb: >> Laut Hersteller ist das Format Signed Short. > > (Hervorhebung von mir) Eben, laut Hersteller. Aber aus dem Hex-Wert allein kann man nicht ablesen, ob er signed oder unsigned ist.
Natürlich nicht, aber die Fragestellung gleitet dann auch irgendwie ins Bizarre ab. Der Hersteller sollte ansatzweise wissen, welches Protokoll verwendet wird. Diese Information gezielt zu ignorieren, um dann darüber zu philosophieren, was möglicherweise gemeint sein könnte ...
Rufus Τ. F. schrieb: > Natürlich nicht, aber die Fragestellung gleitet dann auch irgendwie ins > Bizarre ab. Da im Eingangsbeispiel -400 genannt wurde, ist von vorzeichenbehafteten Zahlen auszugehen. Ich hab das nur nicht explizit dazugeschrieben, dass mir das auch klar war. Einer Hexzahl sieht man ihre Interpretation grundsätzlich nie an, es braucht immer zusätzliche Informationen.
bastler schrieb: > Aber aus dem Hex-Wert allein kann man nicht ablesen, > ob er signed oder unsigned ist. Man kann es mit der Genauigkeit aber auch übertreiben. Das ist ziemlich mühsam hier und macht dann auch kein Spass mehr zu helfen. Weil: Datn schrieb: > Laut Hersteller ist das Format Signed Short. Reicht völlig. Datn schrieb: > Ist das jetzt eigentlich Little Indian oder Big Indian? > > Kapier das unter Vb.net noch nicht so richtig. Intel ist little Endian. Grüsse, René
René H. schrieb: > bastler schrieb: >> Aber aus dem Hex-Wert allein kann man nicht ablesen, >> ob er signed oder unsigned ist. > > Man kann es mit der Genauigkeit aber auch übertreiben. Ausgangspunkt dieser überflüssigen Diskussion war dieser Beitrag: fft schrieb: > Sapperlot W. schrieb: >> Nee. Ob Vorzeichen behaftet laesst sich aufgrund der Hex Schreibweise >> nicht bestimmen. > > Aha... Sowas kann aber auch nur von einem Informatiker kommen. > > Selbstweständlich geht das. Erstes Bit (in dem Falle also das ganz links > stehende Bit in "F") gesetzt = negative Zahl. Was ist daran soooo > schwer? > > Ein halbwegs tauglicher Programmierer sollte zumindest die Hex-Zahlen > 0-F kennen und beherrschen. Darauf kam diese Antwort: S. R. schrieb: > fft schrieb: >> Selbstweständlich geht das. Erstes Bit (in dem Falle also das ganz links >> stehende Bit in "F") gesetzt = negative Zahl. Was ist daran soooo >> schwer? > > Bei einem uint32_t ist das ganz links stehende Bit kein Vorzeichenbit. Es folgte dieser Widerspruch: Rufus Τ. F. schrieb: > Nochmal: Lesen und Verstehen: > > Datn schrieb: >> Laut Hersteller ist das Format Signed Short. Und ich schrieb darauf: bastler schrieb: > Eben, laut Hersteller. > > Aber aus dem Hex-Wert allein kann man nicht ablesen, > ob er signed oder unsigned ist. Ich habe also nur versucht, die Diskussion zu entwirren. Aber vielleicht hätte ich mich besser nicht eingemischt.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.