2016-07-24 56 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