expertenaustausch > microsoft.* > microsoft.german.scripting.wsh

Tom (03.03.2010, 20:21)
Hallo suche eine Funktion mit der ich einen Integerwert im Bereich -32,768
bis 32,767 oder einen Long Wert im Bereich -2,147,483,648 bis 2,147,483,647
in einen unsigned 32 Bit Wert im Bereich von 0 bis 4, 294, 967, 296 in vbs
umrechnen kann. Wie lässt sich sowas realisieren.
Danke
Erhard Wagner (03.03.2010, 20:36)
Am 03.03.2010 19:21, schrieb Tom:
> Hallo suche eine Funktion mit der ich einen Integerwert im Bereich -32,768
> bis 32,767 oder einen Long Wert im Bereich -2,147,483,648 bis 2,147,483,647
> in einen unsigned 32 Bit Wert im Bereich von 0 bis 4, 294, 967, 296 in vbs
> umrechnen kann. Wie lässt sich sowas realisieren.
> Danke


Wie soll denn die Abbildungsregel sein?
z.b.
0 ~> 0
1 ~> 1
-1 ~> 2
2 ~> 3
-2 ~> 4
....

oder irgend wie anders?
Tom (03.03.2010, 21:31)
> Wie soll denn die Abbildungsregel sein?
> z.b.
> 0 ~> 0
> 1 ~> 1
> -1 ~> 2
> 2 ~> 3
> -2 ~> 4
> ....

0 -> 0
1-> 1
65535(0xFFFF) -> 65535
1048575 (0xFFFFF) ->1048575
4294967295 (0xFFFFFFFF) -> 4294967295

Bei Long variable
-2,147,483,648 -> 0
2,147,483,647 -> 4, 294, 967, 296

bzw.
Bei Integer variable
-32,768 -> 0
32,767 -> 65536

Ganz normal nach den Regeln die man aus C kennt.

muss halt berechnungen mit unsigned 32-Bit Integer variablen anstellen,
dafür benötige ich aber diese Funktion, da es sonst zu falschen ergebnissen
kommt wegen der überläufe usw...
Tom (03.03.2010, 21:55)
muss mich revidieren:
also die Abbildungsregel soll sein Zweierkomplement nach Dualcode und das
für 32 Bit werte:
Sprich

0->0
1->1
31 -> 31
-32 -> 32
-31 ->33
-30 -> 34
-16 -> 48
-3 -> 61
-2 -> 62
-1 -> 63
sprich alle bits des zweikomplements invertieren +1 -> Dualcode
Tom (03.03.2010, 22:50)
Also letztendlich suche ich die Umrechenfunktion von Zweierkomplement (so
rechnet vbs bei long und integer) nach dualcode (unsigned integer) für 32 bit
zahlenwerte
sprich die implementierung der summenformel

z = -Xn-1 * 2^(n-1) + summe von i = 0 bis i = n-2 über (Xi *2^i) wobei n die
anzahl der benötigten stellen der zahl im Dualsystem ist und n bei 0 beginnt.
Tom (03.03.2010, 23:19)
Also letztendlich suche ich die Umrechenfunktion von Zweierkomplement (so
rechnet vbs bei long und integer) nach dualcode (unsigned integer) für 32 bit
zahlenwerte

Hier mal mein Beispiel für die umrechnung von zweierkomplement nach unsigned
int (dualcode)

Function LongToUnsignedInt32(ByVal Value)
Dim Return
MsgBox "VarTypeValue: " + CStr(VarType(Value))
If VarType(Value) = 2 Then
If Value < 0 Then
Return = Value + 2^16
Else
Return = Value
End If
End If

If VarType(Value) = 3 Then
If Value < 0 Then
Return = Value + 2^32
Else
Return = Value
End If
End If

MsgBox "VarTypeReturn: " + CStr(VarType(Return))
LongToUnsignedInt32 = Return
MsgBox "UnsignedInt32: " + CStr(LongToUnsignedInt32)
End Function

' LongToUnsignedInt32(&HFFFF)
' LongToUnsignedInt32(&HA5A3)
'LongToUnsignedInt32(&H2)
'LongToUnsignedInt32(&HFFFFF)
LongToUnsignedInt32(&HFFFFFFFF)
Allerdings frage ich mich hier warum vbs den wert &HFFFFFFFF in einer
integer variable ablegt. somit wird die umrechnung falsch, weil die oberen 16
bit einfach abgeschnitten werden. Damit wird das ergebnis falsch. Weiß jemand
warum..?????
Erhard Wagner (05.03.2010, 14:38)
Am 03.03.2010 22:19, schrieb Tom:
[..]
> integer variable ablegt. somit wird die umrechnung falsch, weil die oberen 16
> bit einfach abgeschnitten werden. Damit wird das ergebnis falsch. Weiß jemand
> warum..?????


Mir ist irgendwie nicht ganz klar, was du eigentlich bezwecken willst.
VBx kennt nun mal keinen Datentyp 'unsigned'.

Aber vielleicht hilft dir
weiter ( siehe function StrRID( inVal ) ... ).
Ähnliche Themen