2016-07-24 31 views
0

我正在致力於實現一些加密算法(AES,Blowfish)的C++程序,我需要獲取一些評估指標。具體而言,我需要以千字節每秒來衡量加密/解密操作的數據。該操作將使用相同的純文本數據來測量不同的算法。其中一部分是簡單地使用定時器來獲取秒數,第二部分是對比特數進行計數。從這裏我可以計算出每秒的千字節數。C/C++加密:度量數據速率

我想解決的問題是如何測量通過算法的位數。算法以固定大小的無符號字符數組(格式取決於算法的8或16個字符)的格式輸入。我最初的解決方案是計算通過算法傳遞的字符數,並將其作爲字節數。字節乘以8然後可能是位數,但我已經讀過一個字符不一定總是一個8位字節。位數的差異可能會嚴重扭曲結果。

如何獲得無符號字符數組中的位數? (或者該數組中單個char元素的位數)。

+0

如果你在一個C++程序的工作,那麼你爲什麼要帶標記'C'的問題?儘管C和C++可能相關並且分享了一些語法上的相似之處,但它們仍然是兩種截然不同規則的不同語言。 –

+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位數,看到存在的問題:Get number of bits in char

+0

sizeof(char)是一個字符中的字符數,換句話說它總是爲1. –

+0

Ahh廢話。只需雙重檢查,你是對的。我確定它是字節。刪除了那一點。謝謝。 –

+0

這解決了我的問題。以下代碼來自您的建議:sizeof(char)* CHAR_BIT,與char(或uint8_t)一起使用,如您所述) – x2kpb