Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [c++] notazione esadecimale bignum

    Salve a tutti! Sto scrivendo un programmino utilizzando la libreria gmp per grandi numeri ed ho l'esigenza di stampare un grande intero in formato esadecimale separato da due punti, cioè:
    a partire da un numero di questo tipo:
    n=139845456972894196513894075102026315077487125625 29630087505502225039423109198561972814067162726175 37090322359709384717416174049422264294598882880702 39490156404969....

    devo trasformarlo in uno di questo tipo (1024 bit)
    00:c5:3b:9c:36:3a:19:6c:a9:f2:ba:e9:d2:ed:84:
    33:36:48:07:b2:a3:2d:59:92:b0:86:4c:81:2c:ea:
    5c:ed:f3:ba:eb:17:4e:b3:3a:cc:b7:5b:5d:ca:b3:
    04:ed:fb:59:3c:c5:25:3e:f3:ff:b0:22:10:fb:de:
    72:0a:ee:42:4b:9a:d3:27:d3:b6:fb:e9:88:10:c8:
    47:b7:26:4f:71:40:e4:75:c4:c0:ee:6b:87:b8:6f:
    c9:5e:66:cf:bb:e7:ad:72:68:b8:6d:fd:8f:4c:1f:
    3a:a2:0d:43:25:06:b9:92:e7:20:6c:86:15:a0:eb:
    7f:f7:0b:9a:99:5d:14:88:9b

    Potreste suggerirmi qualcosa?
    Altrimenti,considerando che sto utilizzando la libreria gmp, esiste una funzione che mi permetta di generare un grande numero direttamente in quel formato esadecimale?

  2. #2
    Supponendo di aver già una stringa in esadecimale, ho provato a scrivere un programmino che data tale stringa mi ritorni la stessa ma con ":" ogni due cifre esadecimali. MA continuo ad avere problemi, perchè inserisce i ":" tra un numero e l'altro e non ogni 2:


    codice:
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    const char* dp= ":";
    
    const char* charray = "46a9a3ad7c14709149b004065fe716d5";
    
    string str2;
    
    
    int main ()
    {
    
    string str2(charray); 
    str2.assign(charray);
    
    cout << str2 << endl;
    
    for(int i=1; i<256; i++){
       str2.insert(i*2, dp);
      }
    
    cout << str2 <<endl;
    
    
    
    return 0;
    }
    ma il risultato è:

    46:a:9:a:3:a:d:7:c:1:4:7:0:9:1:4:9:b:0:0:4:0:6:5:f :e:7:1:6:d5

    quando invece dovrebbe essere
    46:a9:a3:ad:7c:14:70:91:49:b0:04:06:5f:e7:16:d5

    Dove sbaglio?? :-(

  3. #3
    Originariamente inviato da penelopelinux
    Supponendo di aver già una stringa in esadecimale, ho provato a scrivere un programmino che data tale stringa mi ritorni la stessa ma con ":" ogni due cifre esadecimali. MA continuo ad avere problemi, perchè inserisce i ":" tra un numero e l'altro e non ogni 2:


    codice:
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    const char* dp= ":";
    
    const char* charray = "46a9a3ad7c14709149b004065fe716d5";
    
    string str2;
    
    
    int main ()
    {
    
    string str2(charray); 
    str2.assign(charray);
    
    cout << str2 << endl;
    
    for(int i=1; i<256; i++){
       str2.insert(i*2, dp);
      }
    
    cout << str2 <<endl;
    
    
    
    return 0;
    }
    ma il risultato è:

    46:a:9:a:3:a:d:7:c:1:4:7:0:9:1:4:9:b:0:0:4:0:6:5:f :e:7:1:6:d5

    quando invece dovrebbe essere
    46:a9:a3:ad:7c:14:70:91:49:b0:04:06:5f:e7:16:d5

    Dove sbaglio?? :-(
    Nel ciclo for, dovresti mettere come condizione
    codice:
    i = i + 2
    , e nella funzione "insert" cambiare il primo argomento in "i+1" anzichè "i^2".

  4. #4
    Grazie al tuo suggerimento ho risolto così:

    codice:
    #include <iostream>
    #include <string>
    
    using namespace std;
    const char* dp= ":";
    const char* charray = "46a9a3ad7c14709149b004065fe716d5";
    
    string str2;
    
    int main ()
    {
    
    string str2(charray); 
    str2.assign(charray);
    
    for(int i=2; i < (str2.size() - 1); i=i+2){
      str2.insert(i, dp);
      i++;
    }
    
    cout << str2 <<endl;
    
    return 0;
    }
    Infatti il risultato è:
    46:a9:a3:ad:7c:14:70:91:49:b0:04:06:5f:e7:16:d5

  5. #5
    Originariamente inviato da penelopelinux
    Grazie al tuo suggerimento ho risolto così:

    ...

    Infatti il risultato è:
    46:a9:a3:ad:7c:14:70:91:49:b0:04:06:5f:e7:16:d5
    Perfetto.

    A presto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.