Ich habe eine Codezeile aus einen Java-Programm nach VB .NET übernommen (kann auch C# sein - in diesem Falle spielt das keine Rolle).
Nur an einer Stelle hapert das ganze leider noch:
abyte0(i1 = i1 + 1) = (&HE0 Or c1 >> 12 & &HF)
Der Compiler mag das irgendwie nicht:
Der >>-Operator ist für die Typen "Char" und "String" nicht definiert.
Irgendwas scheint Java von selbst zu konvertieren / berücksichtigen.
Vielleicht kann mir jemand hierzu einen Tip geben, wie ich das obige Verhalten in .NET irgendwie zu emulieren?
Vielen Dank für die Antworten im Voraus!
Mit freundlichen Grüßen
Innocentus
\V/ Coolness und ein langes Leben.
Schau mal hier:
Datentypen (C# und Java im Vergleich)
Ich denke das Java ein char intern als byte ansieht und deswegen das shiften kann.
Ich vermute mache aus char ein byte und es läuft.
Ansonsten auch mal im Code schauen was du mit der Variable sonst noch so machen willst bzw. einfach mal die Deklarierung posten.
Gruß
Bonvie
Ich habe hierzu jetzt zwei Funktionen gefunden:
Function RShift(ByVal lNum As Long, ByVal lBits As Long) As Long If lBits <= 0 Then RShift = lNum If (lBits <= 0) Or (lBits > 31) Then Exit Function RShift = (lNum And (2 ^ (31 - lBits) - 1)) * _ IIf(lBits = 31, &H80000000, 2 ^ lBits) Or _ IIf((lNum And 2 ^ (31 - lBits)) = 2 ^ (31 - lBits), _ &H80000000, 0) End Function Function LShift(ByVal lNum As Long, ByVal lBits As Long) As Long If lBits <= 0 Then LShift = lNum If (lBits <= 0) Or (lBits > 31) Then Exit Function If lNum < 0 Then LShift = (lNum And &H7FFFFFFF) \ (2 ^ lBits) Or 2 ^ (31 - lBits) Else LShift = lNum \ (2 ^ lBits) End If End Function
Mit freundlichen Grüßen
Innocentus
\V/ Coolness und ein langes Leben.
Hallo Innocentus,
versuche es eher mal mit einem Cast des chars auf int.
BTW: Welche Datentypen haben deine Variablen überhaupt?!?
Ich habe folgenden Code als Beispiel:
Dim c1 As Char = [...]
c1 >= &H1
Nun beschwert sich aber der Compiler:
Der ≥-Operator ist für die Typen "Char" und "Integer" nicht definiert.
Vielen Dank für die Antworten im Voraus!
Mit freundlichen Grüßen
Innocentus
\V/ Coolness und ein langes Leben.
Ich habe beide Threads mal zusammengefügt das es sich um das gleiche Grundproblem handelt.
Baka wa shinanakya naoranai.
Mein XING Profil.
Hallo zusammen,
Ich vermute mache aus char ein byte und es läuft.
beim Portieren von Code von Java nach C#/.NET muss man in dem Zusammenhang - gerade wenn Überläufe erwartet werden - auch unbedingt beachten, dass ein Java-Byte nicht das gleiche wie ein .NET-Byte ist. In Java hat ein Byte den Wertebereich -127 bis 128, in .NET von 0 bis 255.
Das .NET-Pendant zu einem Java-Byte ist SByte.
Gruß,
dN!3L
Gut - ich habe jetzt alle Byte zu SByte gemacht.
Nun gibt es allerdings zwei Probleme:
Mit freundlichen Grüßen
Innocentus
\V/ Coolness und ein langes Leben.
Hallo Innocentus,
Gut - ich habe jetzt alle Byte zu SByte gemacht. Nun gibt es allerdings zwei Probleme
Hm, ich sollte die Antwort noch etwas präzisieren. Es kommt auch immer drauf an, was mit den Bytes gemacht wird. Sobald der Zahlwert des Bytes irgendwie wichtig ist (z.B. int nach byte casten, Überläufe), muss man aufpassen, dass man evtl. SByte verwenden muss. In deinem Fall (GetBytes, etc.) dürfte das aber nicht der Fall sein, also kannst du sicher byte verwenden.
Gruß,
dN!3L
P.S.: [Hinweis] Wie poste ich richtig? Punkt 2.3 - Keine Full Quotes
Nun ja - die Zahlenwerte werden tatsächlich auch mal verwendet.
Gut, das Du daran gedacht hast. - Vielen Dank an Dich - damit hast Du mir viele Kopfschmerzen erspart.
Ich habe einen Weg gefunden: Convert.ToSByte(...) oder ToByte(...)
Mit freundlichen Grüßen
Innocentus
\V/ Coolness und ein langes Leben.
Und wenn ich dann also Funktionen verwende, die Byte verlangen, dann brauche ich also nur noch von SByte nach Byte zu casten, richtig?
Hm, die Hand würde ich dafür jetzt nicht unbedingt ins Feuer legen, aber das sollte gehen. Wenn die Zahlenwerte der Bytes unwichtig sind und nicht damit gerechnet wird, kannst du auch ganz normal byte verwenden.
Gruß,
dN!3L