Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » char * zahl zu einer binärzahl ändern

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
23.12.2008, 18:52 Uhr
michik



hallo,

ich habe ein problem bei meinem code in char * num ist eine sehr große zahl gespeichert wie kann ich diese in eine binärzahl ändern ?
ich habe sie mit atoi zu int geändert nur ist der wert dann falsch da die zahl größer als 32bit ist


C++:
char* num = 0;
num = BN_bn2dec(e);
printf("\nString Format num: %s\n", num);

int x=atoi(num);

for(i=sizeof(x)*8-1; i>=0; --i)
{
    binArray[i]=((x>>i)&1);
}



so hab ich es gemacht aber int ist zu klein darum versuche ich die zahl direkt im char * in eine binärzahl zu verändern
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
23.12.2008, 20:11 Uhr
öni



Google spuckt mir so auf die schnelle (muss zugegeben hab keine ahnung von dem Thema) "atol Convert string to long integer " aus.

Das dürfte dich doch weiterbringen. Dürfte funktionieren wie atoi.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
23.12.2008, 20:14 Uhr
michik



nein leider nicht
die zahlen in char *num sind größer als jeder datentyp den man benutzten kann
darum suche ich eine methode mit der ich num direkt ändern kann

Dieser Post wurde am 23.12.2008 um 20:17 Uhr von michik editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
23.12.2008, 20:35 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja du sagst es ja bereits: wenn deine zahl die du da hast, größer als ein 64bit-integer ist (dürfte der größte basistyp sein) dann wirste das eben nicht mit einem basistypen darstellbar machen können.

Wenn du eine Binärdarstellung deiner Zahl haben willst, dann mach das doch ziffer für ziffer der zahl! direkt aus dem char-array raus
--
class God : public ChuckNorris { };

Dieser Post wurde am 23.12.2008 um 20:37 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
23.12.2008, 20:54 Uhr
michik



ja die zahlen die ich benutzte sind bis zu 4096bits groß
das ist OpenSSL und ich habe dort den montgomery algorithmus mit meinem eigenen square & multiply algorithmus ausgetauscht
nur muss ich den privaten schlüssel (der bis zu 4096 bits groß ist) erstmal binär machen damit ich meinen square & multiply algrotihmus einsetzten kann

wenn ich z.b. die zahl 97habe dann kommt da ja 1100001 und bei 9 und 7 kommt ja 1001 und 111 raus das sind leider unterschiedliche zahlen
und ich muss die binärzahlen durchgehen um das richtig zu berechnen
deshalb suche ich zur zeit nach einer methode in der ich so nen großen char pointer in eine binär zahl ändern kann
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
24.12.2008, 00:07 Uhr
Hans
Library Walker
(Operator)


Hi,

wie wäre es denn mit GMP, der GNU Multiple Precision Arithmetic Library?
Bzw. auch hier klicken .

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
24.12.2008, 10:42 Uhr
michik



ne das kann ich leider nicht benutzten da ich meinen eigenen code in openssl eingebaut habe
aber die benutzten bignums und ich habe gerade gesehen das es eine bignum to bin funktion gibt
aber irgendwie gibt die mir keine binärzahlen aus .. hmm ?
ich muss von der bignum e den wert binär machen und das hab ich mit num versucht
aber ich könnte direkt die BN_bn2bin(e,num) machen nur funktioniert das nicht so ganz wie ich das will


C++:
unsigned char * num;
num = (unsigned char*)malloc(16);
BN_bn2bin(e,num);    //BIGNUM to BIN

int y;
for(y=0; y<16; y++)
    printf("BIN ? : %0x08\n", num[y]);
    printf("BIN 2 %i\n", num[y]);
    printf("BIN 3 %c\n", num[y]);




da kommen dann so sachen raus wie

dc019d0114016101dc019d0114016101101001001001001001001001

irgendwie blick ich da nicht ganz durch

hier ist ne erklärung für die bn2bin funktion
www.openssl.org/docs/crypto/BN_bn2bin.html
das sollte doch eigentlich ne binärzahl von meinem e ausgeben ?

und so ist die funktion im quellcode aus

C++:
int BN_bn2bin(const BIGNUM *a, unsigned char *to)
    {
    int n,i;
    BN_ULONG l;

    n=i=BN_num_bytes(a);
    while (i-- > 0)
        {
        l=a->d[i/BN_BYTES];
        *(to++)=(unsigned char)(l>>(8*(i%BN_BYTES)))&0xff;
        }
    return(n);
    }


Dieser Post wurde am 24.12.2008 um 10:45 Uhr von michik editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
24.12.2008, 11:28 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja das macht hexadezimalzahlen draus, also 0xABCDEF00112233445566778899

musst halt dann den string immer splitten: z.b immer 2-Zeichen nehmen: AB in nen int packen und den dann binär ausgeben

Ansonsten musst du oben natürlich den übertrag berücksichtigen beim umwandeln. Ist aber prinzipiell relativ einfach lösbar. musst nur mal nachdenken wie zahlendarstellungen funktionieren.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
24.12.2008, 12:04 Uhr
michik



ok thx ich werds mal testen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: