Fehler: Der wert des Typs "Byte()" kann nicht in "Byte()()" konvertiert werden.

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Marcolotti.

    Fehler: Der wert des Typs "Byte()" kann nicht in "Byte()()" konvertiert werden.

    Hallo,

    ich benötige mal eine Hilfestellung.

    Ich muss eine APDU Message erstellen. Jedoch meckert er mit folgender Fehlermeldung: "Der Wert des Typs "Byte()" kann nicht in "Byte()()" konvertiert werden"

    Quellcode

    1. Private Async Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    2. Dim cla As String = "E0"
    3. Dim ins as string= "02"
    4. Dim p1 as string= "00"
    5. Dim p2 as string= "00"
    6. Dim data as string= "00"
    7. Dim apdu As Byte = CreateApdu(cla, ins, p1, p2, data)
    8. End Sub
    9. Private Function UnicodeStringToBytes(
    10. ByVal str As String) As Byte()
    11. Return System.Text.Encoding.ASCII.GetBytes(str)
    12. End Function
    13. Function CreateApdu(ByVal cla As String, ins As String, p1 As String, p2 As String, Data As String)
    14. Dim apdu
    15. Dim apdu0 = UnicodeStringToBytes(cla)
    16. Dim apdu1 = Convert.ToByte(ins)
    17. Dim apdu2 = Convert.ToByte(p1)
    18. Dim apdu3 = Convert.ToByte(p2)
    19. Dim apdu4 = Convert.ToByte(Data)
    20. apdu = {apdu0, apdu1, apdu2, apdu3, apdu4}
    21. Return apdu
    22. End Function


    Kann mir da mal jemand helfen?

    Gruß Marco 8|
    @Marcolotti Das ist etwas wenig Information.
    Mit anderen Worten und anderen Datentypen:
    Du willst aus einem Integer ein Int-Array machen oder umgekehrt.
    Fang an und gib Deinem Projekt Option Strict On, damit Du Deinen Fehler genauer beschreiben kannst.
    Visual Studio - Empfohlene Einstellungen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Irgendwie packst du das falsch an.

    Die Werte die du da als String führst sind doch Hex-Werte. Unterscheide also zwischen reele Zahlen (Byte) und formatierte Zahlen. Und wie schon RFG gesagt hat.

    VB.NET-Quellcode

    1. Option Strict On
    2. Option Explicit On


    Ich würde auf jedenfall alle deine Strings als Byte behandeln. Alle Werte liegen doch im Bereich 0 - 255.

    Freundliche Grüsse

    exc-jdbi

    exc-jdbi schrieb:

    Die Werte die du da als String führst sind doch Hex-Werte.
    Nein.
    Das sind Strings, deren Inhalt Hex-Repräsentation von Zahlen sind.
    @Marcolotti Das kann man aber nur mit Strict On erkennen und lernen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke erstmal, ist das jetzt besser so? Kann mir jemand nun bei den Fragezeichen helfen?

    Quellcode

    1. Private Async Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    2. Dim network As Network = Network.Main
    3. Dim Ledger As LedgerClient = (Await LedgerClient.GetHIDLedgersAsync()).First()
    4. Dim cla As UInt32 = &HE
    5. Dim ins As UInt32 = &H2
    6. Dim p1 As UInt32 = &H0
    7. Dim p2 As UInt32 = &H0
    8. Dim data As UInt32 = &H0
    9. Dim apdu As Byte()() = CreateApdu(cla, ins, p1, p2, data)
    10. Dim cancellation As CancellationToken
    11. Dim responses As Runtime.CompilerServices.ConfiguredTaskAwaitable(Of Byte()()) = Ledger.Transport.Exchange(apdu, cancellation).ConfigureAwait(False)
    12. End Sub
    13. Public Function CreateApdu(ByVal cla As UInt32, ByVal ins As UInt32, ByVal p1 As UInt32, ByVal p2 As UInt32, ByVal Data As UInt32) As Byte()()
    14. Dim apdu As Byte()()
    15. Dim apdu0 As Byte = Convert.ToByte(cla)
    16. Dim apdu1 As Byte = Convert.ToByte(ins)
    17. Dim apdu2 As Byte = Convert.ToByte(p1)
    18. Dim apdu3 As Byte = Convert.ToByte(p2)
    19. Dim apdu4 As Byte = Convert.ToByte(Data)
    20. apdu = ???????
    21. Return apdu
    22. End Function

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Marcolotti“ ()

    @Marcolotti Was soll apdu werden :?:
    Das sieht eher nach einem Byte-Array aus als nach einem zwei-dimensionalen Byte-Array. Das solltest Du zunächst aufklären.
    Was erwartet die Prozedur Ledger.Transport.Exchange() für Parameter?
    Wie sind sie beschrieben?
    Und:
    Warum legst Du Variablen vom Typ UInt32 an, wenn Du sie wenige Zeilen tiefer in Byte konvertierst?
    Mach da doch gleich Byte draus.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany

    Das ist erstmal nur zum testen. Ich möchte damit mit einem Ledger NanoS kommunizieren. Er erwartet ein zwei Dimensionales ByteArray.
    github.com/LedgerHQ/ledger-dot…master/LedgerWallet.Tests

    Ich möchte zunächst erstmal den Public Key vom NanoS erfahren (aktuelle APDU-Message) und danach sollen Transaktionen stattfinden daher habe ich die Variablen erstmal variabel gelassen. Ich muss erstmal das System begreifen.

    In Python sieht das so aus:

    Quellcode

    1. # Create APDU message.
    2. # CLA 0xE0
    3. # INS 0x02 GET_PUBLIC_KEY
    4. # P1 0x00 NO USER CONFIRMATION
    5. # P2 0x00 NO CHAIN CODE
    6. # Ask for confirmation
    7. # txt = "E0020100" + '{:02x}'.format(len(donglePath) + 1) + '{:02x}'.format( int(len(donglePath) / 4 / 2)) + donglePath
    8. # No confirmationapduMessage = "E0020000" + '{:02x}'.format(len(donglePath) + 1) + '{:02x}'.format(int(len(donglePath) / 4 / 2)) + donglePathapdu = bytearray.fromhex(apduMessage)
    @Marcolotti Ich habe keine Lust, wegen Dir Python zu lernen.
    Und aus den 4 CS-Dateien die richtige herauszusuchen habe ich auch keine Lust.
    Hier ist die genaue Zuordnung wichtig, und die kenne ich nicht.
    Probierma

    VB.NET-Quellcode

    1. Public Function CreateApdu(cla As Byte, ins As Byte, p1 As Byte, p2 As Byte, data As Byte) As Byte()()
    2. Dim apdu = New Byte(5)() {}
    3. apdu(0) = {cla}
    4. apdu(1) = {ins}
    5. apdu(2) = {p1}
    6. apdu(3) = {p2}
    7. apdu(4) = {data}
    8. Return apdu
    9. End Function

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!