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


von Datn (Gast)


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.

von Wolfgang H. (drahtverhau)


Lesenswert?

Int16 oder short glaub ich

: Bearbeitet durch User
von Joachim B. (jar)


Lesenswert?

versuchs mit -1 *(2^16-65136)

von Datn (Gast)


Lesenswert?

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

Ja, klappt :-D

von Datn (Gast)


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 :-/

von Wolfgang H. (drahtverhau)


Lesenswert?

Naja... Dann tausch doch die beiden byte...

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Pandur S. (jetztnicht)


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.

von Rufus Τ. F. (rufus) Benutzerseite


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.

von fft (Gast)


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.
von S. R. (svenska)


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.

von Rufus Τ. F. (rufus) Benutzerseite


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)

von bastler (Gast)


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.

von Rufus Τ. F. (rufus) Benutzerseite


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 ...

von S. R. (svenska)


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.

von René H. (Gast)


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é

von bastler (Gast)


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.

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
Noch kein Account? Hier anmelden.