2016-07-24 1 views
0

私はいくつかの暗号化アルゴリズム(AES、Blowfish)を実装しているC++プログラムで作業しており、評価のためにいくつかのメトリクスを取得する必要があります。具体的には、暗号化/復号化操作のデータをキロバイト/秒で測定する必要があります。この操作では、同じプレーンテキストデータを使用して異なるアルゴリズムを測定します。これの一部は、単純に秒を得るためのタイマーを使用し、第2の部分はビット数を数えることです。ここから私は毎秒キロバイトを計算することができます。C/C++暗号化:データレートを測定する

私が解決しようとしている問題は、アルゴリズムを通過するビット数を測定する方法です。アルゴリズムは、固定サイズの符号なし文字配列(アルゴリズムに応じて8または16文字)の形式で入力を受け取ります。私の初期の解決策は、アルゴリズムを通過する文字の数を数え、これをバイト数とすることでした。バイトを8倍したのはおそらくビット数ですが、文字は必ずしも常に8ビットのバイトであるとは限りません。ビット数の相違により、結果が大幅に歪んでしまう可能性があります。

unsigned char配列のビット数はどのくらい正確に得られますか? (または、その配列内の単一のchar要素のビット数)。

+0

を、なぜあなたは 'C'との質問にタグを付けたのですか? CとC++は関連性があり、いくつかの構文上の類似点を共有しているかもしれませんが、異なる規則を持つ2つの非常に異なる言語です。 –

+0

私のプログラムの暗号化アルゴリズムの実装はパブリックドメインです。それらはCで書かれています。私のプログラム(ラッパーに似ています)はC++です。意味の違いが正しいので、私はCタグを削除しました。 – x2kpb

+2

エキゾチックな(そしておそらく時代遅れの)アーキテクチャーで作業しているのでなければ、文字のビット数は正確に8です。この仮定を作るためのコードが既にあります(それはPOSIXにもあります)。同じことをやっているラインをもう少し追加することは、もはや今は傷つきません。 http://stackoverflow.com/questions/2098149/what-platforms-have-something-other-than-8-bit-char –

答えて

0

charは8ビット以外のものはほとんどありませんが、100μである必要がある場合は、代わりにint8_t/uint8_tを使用してください。 uint8_tはいずれの場合でも、バイナリデータの場合はcharよりもはるかに自然な型です。つまり、任意のプラットフォームでcharが署名済みかどうかの問題を回避します。

charのビット数については、この既存の質問を参照してください。あなたがC++プログラムで作業している場合はGet number of bits in char

+0

sizeof(char)はcharのcharの数です。つまり、常に1です。 –

+0

Ahh。ダブルチェックして、あなたは正しいです。私はそれがバイトであると確信していた。そのビットを削除しました。ありがとう。 –

+0

これは私の問題を解決しました。あなたの提案から次のコード:sizeof(char)* CHAR_BIT、char(またはあなたが言及したようにuint8_t) – x2kpb