Italian conversioni che passione

Discussion in 'Italian Forum' started by fabero, May 16, 2018 at 1:15 PM.

  1. fabero

    fabero Active Member Licensed User

    Sempre cercando di rinfrescarmi la memoria, sto incontrando difficoltà con le conversioni e chiedo aiuto per capire come approcciarmi al problema.
    Campo textfield dove l'utente inserisce un codice, sulla carta esadeciamale lungo da 8 a 14 caratteri.
    Questo codice lo devo a seconda della lunghezza trattare diversamente.
    Sostanzialmente però è sempre una serie di "substring" e conversioni da HEX a decimale, e poi un possibile "riassemblaggio" della stringa e nuovamente una conversioone in qualche altra base.

    Lurkando un po' sembra che la soluzione ai miei problemi venga dalla libreria ByteConverter.. Però dagli esempi e documentazione invece mi sembra una strada sbagliata..
    Any Tips? ah no è il forum italiano.. Idee?? :D
     
  2. sirjo66

    sirjo66 Well-Known Member Licensed User

    secondo me devi usare ByteConverter, se ci mostri un esempio più pratico possiamo esserti più di aiuto
     
  3. fabero

    fabero Active Member Licensed User

    Valore di ingresso per esempio ABCD1234, in questo caso, devo prendere per esempio le coppie: AB CD 12 34, dopodichè ribaltare il tutto 34 12 CD AB, riassemblare 3412CDAB e convertire per esempio in decimale.
    Oppure
    Valore di ingresso per esempio ABCD1234FFFF, in questo caso, devo prendere per esempio a gruppi: AB CD1234 FFFF, dopodichè ribaldare il tutto FFFF CD1234 AB, convertire in decimale i 3 gruppi, e poi assemblare ogni gruppo.
     
    Last edited: May 16, 2018 at 2:44 PM
  4. sirjo66

    sirjo66 Well-Known Member Licensed User

    ..... e dov'è il problema ???
    prima di tutto fai un IF (o un SELECT CASE) per dividere i due casi, se la stringa è lunga 8 caratteri oppure se è lunga 12 caratteri.
    Se è lunga 8 caratteri, con dei substring la dividi, poi la riassemble invertita e poi la converti.

    Non vedo il problema, se butti giù un po' di codice lo vediamo insieme e lo correggiamo
     
    LucaMs likes this.
  5. LucaMs

    LucaMs Expert Licensed User

    Beato te; io vedo un sacco di problemi - nel senso che mi ci perdo e passo ad altro :D
     
  6. fabero

    fabero Active Member Licensed User

    Io si, perchè se io elaboro la stringa, poi ho un esadecimale in un primo caso ad esempio ABCD1234 se devo convertirlo, e poi rimandarlo in un textfield di uscita come faccio?
    HexToBytes e StringFromBytes ? Il primo alla compilazione si arrabbia dicendo:

    src\b4j\example\main.java:254: error: incompatible types: byte[] cannot be converted to byte
    _mifare_reverse_byte = (byte)(_bc.HexToBytes("0xabcd1234"));
     
  7. sirjo66

    sirjo66 Well-Known Member Licensed User

    ora purtroppo non ho il tempo per fare una prova, ma tu hai provato con bc.HexToBytes("abcd1234") ??
     
  8. fabero

    fabero Active Member Licensed User

    In più modi:
    Parte comune
    Dim BC As ByteConverter
    Dim Reverse_Byte As Byte

    poi
    Reverse_Byte = BC.HexToBytes("abcd1234")
    oppure
    Reverse_Byte = BC.HexToBytes("ABCD1234")
    oppure
    Reverse_Byte = BC.HexToBytes("0xabcd1234")
    oppure
    Reverse_Byte = BC.HexToBytes("0xABCD1234")
    oppure
    Dim Dritto As String
    Dritto = valore string calcolato
    Reverse_Byte = BC.HexToBytes(Dritto)
    oppure
    Dim Dritto As String
    Dritto = valore string calcolato
    Reverse_Byte = BC.HexToBytes("0x" & Dritto)
     
  9. udg

    udg Expert Licensed User

    Che io ricordi hexToBytes ritorna un array di byte non la conversione esadecimale-decimale
     
  10. LucaMs

    LucaMs Expert Licensed User

    Ce la fa anche la mia memoria, ma solo perché leggo:
    hexToByteS

    :D
     
  11. fabero

    fabero Active Member Licensed User

    MA perchè deve dare errore?
     
  12. LucaMs

    LucaMs Expert Licensed User

    Perché se restituisce un array, devi dichiarare un array


     
    fabero likes this.
  13. fabero

    fabero Active Member Licensed User

    Le parenti! :D Cazz! se non le evidenziavi col ciufolo che notavo che mancavano!
     
  14. LucaMs

    LucaMs Expert Licensed User

    Parenti = serpenti :)
     
    fabero likes this.
  15. fabero

    fabero Active Member Licensed User

    Già.. ma ora mi trovo davanti ad un altro aspetto, la conversione in decimale,
    se faccio ad esempio

    Dim x as Long oppure String
    x = Bit.ParseInt("FFFFFFFF", 16)

    Il valore atteso sarebbe 4294967295 e invece...

    java.lang.NumberFormatException: For input string: "FFFFFFFF"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:583)
    at anywheresoftware.b4a.keywords.Bit.ParseInt(Bit.java:86)
    at technofab.mifaredecoder.main._decodebadge(main.java:258)
    at technofab.mifaredecoder.main._decode_click(main.java:155)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

    .......................


    Se invece uso una formula tipo:
    bc.IntsFromBytes(bc.HexToBytes("FFFFFFFF"))(0))

    ottengo -1

    Su C# tale numero sarebbe un "int64" se non ricordo male...
     
    Last edited: May 17, 2018 at 11:14 AM
  16. udg

    udg Expert Licensed User

    Quel valore è troppo grande per un INT . Prova con:
    Code:
    Dim myvalue As Long = ParseLong( "FFFFFFFF",16)
    Log(myvalue)

    Sub ParseLong(Number As String, Radix As Int) As Long
       
    Dim jo As JavaObject
       jo.InitializeStatic(
    "java.lang.Long")
       
    Return jo.RunMethod("parseLong"Array As Object(Number, Radix))
    End Sub
     
    sirjo66 and Star-Dust like this.
  17. fabero

    fabero Active Member Licensed User

    Si infatti, la tua Sub worka, grazie. Mi devo studiare le funzioni di questa libreria che non conoscevo.
     
  18. LucaMs

    LucaMs Expert Licensed User

    rili nais!
    :D
     
    fabero likes this.
Loading...