mikrocontroller.net

Forum: PC-Programmierung Welcher Datentyp? 65136 = hxFE70 = -400


Autor: Datn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Wolfgang H. (drahtverhau)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Int16 oder short glaub ich

: Bearbeitet durch User
Autor: Joachim B. (jar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
versuchs mit -1 *(2^16-65136)

Autor: Datn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Joachim B. schrieb:
> versuchs mit -1 *(2^16-65136)

Ja, klappt :-D

Autor: Datn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 :-/

Autor: Wolfgang H. (drahtverhau)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja... Dann tausch doch die beiden byte...

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
// C99 Lösung I (int >= 32 Bit)

uint16_t val = 65136;

int32_t val32 = val;

if (val32 >= 32768)
    val32 -= 65536;

// C99 Lösung II (int >= 32 Bit)

uint16_t val = 65136;

int32_t val32 = val;

if (val32 & 32768)
    val32 |= -32768;
 
Übersetzen nach .net => Hausaufgabe.

Autor: Rufus Τ. F. (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Wert 0xfe70 ist ein vorzeichenbehafteter 16-Bit-Wert, dargestellt im 
Zweierkomplement.

In C kann man das so "umrechnen":
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.

Autor: Zitronen F. (jetztnicht)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

Autor: Rufus Τ. F. (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: fft (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.
Autor: S. R. (svenska)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Rufus Τ. F. (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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)

Autor: bastler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Rufus Τ. F. (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ...

Autor: S. R. (svenska)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: René H. (Firma: Herr) (hb9frh)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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é

Autor: bastler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.