:P :) nu har jeg ledt i en halv time efter den tilde operator. Hvorfor er det at den ikke står nævnt nogen som helst steder som andet end til destructoren?
Følgende C# kode skal jeg have lavet om til VB.NET: ------------------- C# --------------------------- uint cs = 0; for (int i = 0; i < pCommand.Length; i = i+2) cs += BitConverter.ToUInt16(pCommand, i); cs = ~((cs & 0xffffu) + (cs >> 16));
Jeg er kommet frem til at en "uint" svarer til en System.UInt32, så ville tro at jeg skulle lave det således her:
------------------- VB.NET ----------------------- Dim cs As UInt32 For i As Int32 = 0 To i < pingCommand.Length Step 2 cs += BitConverter.ToUInt16(pingCommand, i) Next cs = Not ((cs And &HFFFF) + (cs >> 16))
VB.NET linje 3 (inde i for/next) : "Operator '+' is not defined for types 'System.UInt32' and 'System.UInt16'." - og det hjælper ikke at lave det om til "ToUInt32()" - Den siger det samme at operator '+' is not defined.
De 3 linjer efter for/next giver også fejl... At Operatoren 'AND' og '>>' ikke kan bruges der.
hmm.. nu kommer den så fint igennem løkken, men jeg er i tvivl om hvilken BitConverter jeg skal bruge, da jeg ikke kan bruge ToUInt16() jo, men har brug for det samme resultat? Jeg kan ikke få den til at give det rigtige resultat! :-(
Vil meget gerne sætte point op... smider lige 200 point i det, da jeg syntes det er ved at være meget svært!
uint cs = 0; for (int i = 0; i < pingCommand.Length; i = i+2) cs = cs + BitConverter.ToUInt16(pingCommand, i); cs = ~((cs & 0xffffu) + (cs >> 16));
tel[2] = (byte) cs; tel[3] = (byte) (cs >> 8); }
Der er ikke så meget mere i det.. jeg har lavet følgende kode, som virker syntaxmæssigt, men giver en beregningsfejl efter løkken hvor de nye Byte værdier skal sættes, da det er en forkert værdi jeg får fra Bitconverteren, da jeg ikke kan bruge den ToUInt16 som er brugt i den oprindelige C#:
Protected Sub SetCheckSum(ByVal tel As Byte()) '// reset old checksum tel(2) = 0 tel(3) = 0
'// calculate new checksum Dim cs As Int32 Dim i As Int32 = 0 While i < pingCommand.Length cs += BitConverter.ToInt16(pingCommand, i) i = i + 2 End While
cs = Not ((cs And &HFFFF) + (cs >> 16))
'// set new checksum tel(2) = CType(cs, Byte) tel(3) = CType((cs >> 8), Byte) End Sub
Public Class VbClass Public Shared Sub SetChecksum(ByVal pingCommand As Byte(), ByVal tel As Byte()) tel(2) = 0 tel(3) = 0 Dim cs As Integer = 0 Dim i As Integer = 0 While i < pingCommand.Length cs = cs + Convert.ToInt32(BitConverter.ToUInt16(pingCommand, i)) i = i + 2 End While cs = Not ((cs And &HFFFF) + (cs >> 16)) tel(2) = Convert.ToByte(cs And &hFF) tel(3) = Convert.ToByte((cs >> 8) And &HFF) End Sub
Public Shared Sub Main(ByVal args As String()) Dim tel(4) As Byte SetChecksum(Encoding.Default.GetBytes("Dette er en lille test"), tel) Console.WriteLine(tel(2) & " " & tel(3)) End Sub End Class
Jeg fik det oversat, men var desværre så dum ikke at teste C# eksemplet ordentligt først, så det virkede faktisk ikke 100% efter hensigten fra starten af! :-(
Hvis du ligger et svar arne_v - så kan du (igen!) få dine velfortjente point!
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.