2016-07-24 5 views
0

Ich arbeite an einem C++ - Programm, das einige Verschlüsselungsalgorithmen (AES, Blowfish) implementiert, und ich brauche einige Metriken zur Auswertung. Insbesondere muss ich die Daten einer Verschlüsselungs-/Entschlüsselungsoperation in Kilobyte pro Sekunde messen. Diese Operation würde dieselben Klartextdaten verwenden, um verschiedene Algorithmen zu messen. Ein Teil davon besteht darin, einfach einen Timer zu verwenden, um die Sekunden zu erhalten, und der zweite Teil besteht darin, die Anzahl der Bits zu zählen. Von hier aus kann ich die Kilobyte pro Sekunde berechnen.C/C++ - Verschlüsselung: Datenrate messen

Das Problem, das ich zu lösen versuche, ist, wie man die Anzahl der Bits, die die Algorithmen durchlaufen, misst. Die Algorithmen nehmen Eingaben im Format eines vorzeichenlosen Zeichenfeldes fester Größe (8 oder 16 Zeichen je nach Algorithmus) vor. Meine anfängliche Lösung bestand darin, die Anzahl der Zeichen zu zählen, die den Algorithmus durchlaufen, und dies als Anzahl der Bytes zu nehmen. Die mit 8 multiplizierten Bytes wären dann vermutlich die Bitzahl, aber ich habe gelesen, dass ein Zeichen nicht notwendigerweise immer ein 8-Bit-Byte ist. Eine Diskrepanz in der Bitzahl könnte die Ergebnisse signifikant verfälschen.

Wie genau würde ich die Anzahl der Bits in einem unsigned Char-Array erhalten? (Oder die Anzahl der Bits eines einzelnen Char-Elements in diesem Array).

+0

Wenn Sie auf einem C++ Programm arbeiten, warum haben Sie die Frage mit 'c' Tag? Während C und C++ verwandt sein können und einige syntaktische Ähnlichkeiten aufweisen, sind sie immer noch zwei sehr unterschiedliche Sprachen mit unterschiedlichen Regeln. –

+0

Die Implementierungen der Verschlüsselungsalgorithmen in meinem Programm sind Public Domain, sie sind in C geschrieben. Mein Programm (das einem Wrapper ähnlich ist) ist in C++. Ich habe das C-Tag entfernt, da Sie bezüglich der semantischen Unterschiede korrekt sind. – x2kpb

+2

Wenn Sie nicht an einer exotischen (und wahrscheinlich veralteten) Architektur arbeiten, ist die Anzahl der Bits in einem Zeichen genau 8. Es gibt bereits einen Berg von Code, der diese Annahme trifft (und auch in POSIX); ein paar Zeilen mehr hinzuzufügen, das gleiche zu tun, wird jetzt nicht mehr wehtun. Siehe http://stackoverflow.com/questions/2098149/what-platforms-have-etwas-other-than-8-bit-char –

Antwort

0

char ist höchstwahrscheinlich nichts anderes als 8Bits, aber wenn Sie 100℅ sicher sein müssen, verwenden Sie stattdessen int8_t/uint8_t. uint8_t ist in jedem Fall ein viel natürlicherer Typ als char für Binärdaten - es vermeidet das Problem, ob char auf einer beliebigen Plattform signiert oder unsigniert ist.

Für Anzahl von Bits in char finden Sie in diese bestehende Frage: Get number of bits in char

+0

sizeof (char) ist die Anzahl der Zeichen in einem Zeichen, mit anderen Worten ist es immer 1. –

+0

Ahh Mist. Einfach doppelt überprüft und du hast Recht. Ich war mir sicher, dass es Bytes waren. Dieses Bit wurde entfernt. Vielen Dank. –

+0

Das hat mein Problem gelöst. Der folgende Code aus deinem Vorschlag: sizeof (char) * CHAR_BIT, funktioniert mit char (oder uint8_t wie du erwähnt hast) – x2kpb