【发布时间】:2021-10-06 08:22:47
【问题描述】:
好的,所以我一直在做这个,它旨在成为加密软件的一部分,就像 2fa 一样工作
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
int RGX;
int box[32];
srand (time(NULL));
RGX = rand() % 100000000 + 9999999;
cout << "Random Generated One Time HEX #:" << endl;
cout << std::hex << RGX << endl;
while(RGX!=1 || 0)
{
int m = RGX % 2;
cout << " " << m << " ";
RGX = RGX / 2;
cout << RGX << endl;
}
return 0;
}
这是它的输出示例:
Random Generated One Time HEX #:
3ff3c70
0 1ff9e38
0 ffcf1c
0 7fe78e
0 3ff3c7
1 1ff9e3
1 ffcf1
1 7fe78
0 3ff3c
0 1ff9e
0 ffcf
1 7fe7
1 3ff3
1 1ff9
1 ffc
0 7fe
0 3ff
1 1ff
1 ff
1 7f
1 3f
1 1f
1 f
1 7
1 3
1 1
** Process exited - Return Code: 0 **
每次结果都不一样,因为它是随机的,我还没有完成。但我需要知道的是如何将二进制值存储在数组中,二进制值是左边的数字。
【问题讨论】:
-
while(RGX!=1 || 0)- 什么....? -
这只是将随机十六进制转换为二进制
-
@LisandroGarciaMartinez WhozCraig 的意思是
a != b || 0与a != b完全相同,因为0只是错误的。另外,您能否评论一下为什么要将整数转换为表示其位的整数数组?为什么这比只使用整数本身更有用? -
这不会“转换”任何东西。它测试以下两个条件之一是否为真:(a) RGX != 1,如果为假,(b) 0,即从不为真。无论如何,如何使用此代码存储在数组中,当提示用户在循环中重复输入时,您将如何存储到数组中?这样做,但不是提示输入,而是在每次迭代时存储
m的值。 -
unsigned m = RGX & 0x1;比int m = RGX % 2;快得多(尽管一些编译器会这样做作为优化)。此外,任何带符号整数的位操作都可能会给您带来意想不到的结果。然后RGX>>=1;如果对 RGX 进行签名,则可能会为某些编译器生成具有最高有效位的非零位(当然对于 minGW 也是如此)。但是您甚至不需要手动执行这些操作。您只需要std::bitset
标签: c++ arrays random binary decimal