Care este valoarea maximă a caracterelor într-un program java în Netbeans IDE / ce este în neregulă cu programul meu? (Programare, Java, Netbeans, Unicode)

BvanW a intrebat.

Care este valoarea maximă Unicode a unui char în Java (în special în Netbeans IDE, dacă asta face vreo diferență) Am încercat să scriu un program care, ca parte a programului, înmulțește un char cu un număr aleatoriu. Conform celor auzite, pe baza valorii maxime Unicode, ar trebui să pot multiplica char-ul cu cea mai mare valoare pe care îl folosesc (tilde) cu cel puțin 8000 fără a provoca overflow, însă în programul meu se produce overflow. Există o diferență între valoarea maximă Unicode char și cea maximă care este disponibilă în Netbeans? În cazul în care nu este cazul, am inclus codul meu mai jos:

EDIT Ceea ce vreau să fac cu această porțiune a programului este să „criptez” parola prin înmulțirea char-ului cu un număr aleatoriu, iar apoi am inclus o secțiune separată menită să „decripteze” respectivul cod, însă testând cu numere mai mici am constatat că acea parte a funcționat.

public static void main(String[] args) {

    String pass = "Password";
    String pwE = "";
    int key [] = new int[pass.length()];

    for (int i = 0; i < pass.length(); i++)
    {
        key[i] = (int)(Math.random()*8000+1); /*EDIT changed the placeholder to the actual function I'm using */
        System.out.println(key[i]);
    }

    for (int i = 0; i < pass.length(); i++)
    {
        pwE += (char)(pass.charAt(i)*key[i]);
    }
    System.out.println(pwE);
    pass = "";

     for (int i = 0; i < pwE.length(); i++)
    {
        pass += (char)(pwE.charAt(i)/key[i]);
    }    
    System.out.println(pass);
}

2 răspunsuri
Lew Bloch

„Există o diferență între valoarea maximă a caracterelor Unicode și cea maximă care este disponibilă în Netbeans [sic]?”

Nu, bineînțeles că nu. NetBeans nu are propria sa versiune privată și neconformă de Java. Valoarea maximă a unui caracter char este întotdeauna Character.MAX_VALUE, , așa cum este documentat.http://docs.oracle.com/javase/8/docs/api/java/lang/Character.html#MAX_VALUE

Problema dvs. este foarte probabil cauzată de utilizarea lui String pentru a conduce „criptare” și „decriptare”. Nu vă obosiți să controlați codificarea șirurilor de caractere, iar acest lucru ar putea crea ciudățenii în ceea ce privește perechile surogat și altele asemenea. Amestecați natura numerică a char cu Stringpentru a reprezenta caractere.

Din moment ce nu v-ați deranjat să ne comunicați intrările, ieșirile așteptate și ieșirile reale, putem doar să presupunem. Poate că dacă ați fi împărtășit suficiente informații …

Comentarii

  • Am adăugat doar câteva informații suplimentare. Scuzați-mi ignoranța, dar sunt destul de nou în domeniul codării, ce înțelegeți prin codificarea String? Vă mulțumesc pentru asistență. –  > Por BvanW.
  • O căutare online pentru „String encoding Unicode” va dezvălui multe, dar o codificare este o cartografiere a valorilor numerice precum 65 în caractere precum A, , și există multe codificări. ASCII codifică 127 de caractere în valori de un singur octet, de exemplu. Problema este că există peste 100.000 de caractere deja standardizate, mai multe decât pot fi cartografiate de o codificare char, , ca să nu mai vorbim de un octet. Așadar, există câteva variante de Unicode sau codificări, inclusiv UTF-8 și UTF-16, care mapează șirurile de caractere în secvențe de mai mulți octeți sau mai multe caractere. Merită să citiți despre asta. În orice caz, nu utilizați String pentru criptare. –  > Por Lew Bloch.
Bathsheba

Un char este un tip de 16 biți fără semn în Java.

Valoarea sa maximă este de 65535.

Înmulțirea unui char cu un element de cheie mi se pare suspectă. Castingul tău pentru acest rezultat (care va fi un tip int) înapoi la char cauzează wraparound modulo 65536.

Suspiciunea ta cu privire la Netbeans este o pistă falsă.

Foarte grosier, dacă șirul dvs. folosește doar caractere ASCII, atunci o multiplicare de maximumum de 512 ar funcționa.

Comentarii

  • Vă mulțumim. Ce tip de date mi-ați sugera să folosesc în schimb pentru a utiliza întreaga gamă de valori disponibile? –  > Por BvanW.