Hallo,
ich versuche etwas in VB.net nachzuprogrammieren, Vorlage dabei ist folgender C++/Qt code:
Ziel ist es in VB.net den ByteArray "encodedStr" zu erhalten, so wie das Ergebnis oben in C++.
So sieht mein VB.net code aus:
Wie man sieht ist der einzige Unterschied der Anfang "14 00 4D" im Vergleich zu "14 4D". Ich gehe mal davon aus, dass in C++ "stream << strSize;" verursacht, dass "14 00" in das ByteArray geschrieben wird, bei mir wird allerdings nur "14" in payLoad geschrieben.
Die eigentliche Frage ist, warum fehlen bei mir die 00 bzw. wie ist die korrekte Übersetzung von "stream << strSize;" in vb?
Danke
ich versuche etwas in VB.net nachzuprogrammieren, Vorlage dabei ist folgender C++/Qt code:
C-Quellcode
- const QString str = "191.168.2.249"
- const QByteArray strBase64 = QByteArray(str.toLatin1()).toBase64();
- //============ strBase64 =============
- //4d 54 6b 79 4c 6a 45 32 4f 43 34 79 4c 6a 49 30 4f 51 3d 3d
- const qint16 strSize = strBase64.size(); // = 20
- QByteArray encodedStr;
- QDataStream stream(&encodedStr, QIODevice::WriteOnly);
- stream.setByteOrder(QDataStream::LittleEndian);
- stream << strSize;
- stream.setByteOrder(QDataStream::BigEndian);
- stream.writeRawData(strBase64, strSize);
- return encodedStr;
- //============ encodedStr =============
- //14 00 4d 54 6b 79 4c 6a 45 32 4f 43 34 79 4c 6a 49 30 4f 51 3d 3d
Ziel ist es in VB.net den ByteArray "encodedStr" zu erhalten, so wie das Ergebnis oben in C++.
So sieht mein VB.net code aus:
VB.NET-Quellcode
- Dim payLoad As Byte() = {}
- Dim remoteIpEncoded As Byte() = Encoding.ASCII.GetBytes(ToBase64("192.168.2.249"))
- Dim loadSize As Byte() = HexTOByte(Convert.ToString(remoteIpEncoded.Length, 16)) '// remoteIpEncoded.Length = 20
- Array.Resize(payLoad, remoteIpEncoded.Length + loadSize.Length)
- loadSize.CopyTo(payLoad, 0)
- remoteIpEncoded.CopyTo(payLoad, loadSize.Length)
- '// Daraus folgt für payLoad:
- '// 14 4D 54 6B 79 4C 6A 45 32 4F 43 34 79 4C 6A 49 30 4F 51 3D 3D
- Private Function HexTOByte(str As String) As Byte()
- Dim hexString As String = str
- Dim length As Integer = hexString.Length
- Dim upperBound As Integer = length \ 2
- If length Mod 2 = 0 Then
- upperBound -= 1
- Else
- hexString = "0" & hexString
- End If
- Dim bytes(upperBound) As Byte
- For i As Integer = 0 To upperBound
- bytes(i) = Convert.ToByte(hexString.Substring(i * 2, 2), 16)
- Next
- Return bytes
- End Function
Wie man sieht ist der einzige Unterschied der Anfang "14 00 4D" im Vergleich zu "14 4D". Ich gehe mal davon aus, dass in C++ "stream << strSize;" verursacht, dass "14 00" in das ByteArray geschrieben wird, bei mir wird allerdings nur "14" in payLoad geschrieben.
Die eigentliche Frage ist, warum fehlen bei mir die 00 bzw. wie ist die korrekte Übersetzung von "stream << strSize;" in vb?
Danke