如何将二进制数存储在数组中?

Posted

技术标签:

【中文标题】如何将二进制数存储在数组中?【英文标题】:How do i store a binary number in an array? 【发布时间】: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 || 0a != b 完全相同,因为0 只是错误的。另外,您能否评论一下为什么要将整数转换为表示其位的整数数组?为什么这比只使用整数本身更有用? 这不会“转换”任何东西。它测试以下两个条件之一是否为真:(a) RGX != 1,如果为假,(b) 0,即从不为真。无论如何,如何使用此代码存储在数组中,当提示用户在循环中重复输入时,您将如何存储到数组中?这样做,但不是提示输入,而是在每次迭代时存储 m 的值。 unsigned m = RGX &amp; 0x1;int m = RGX % 2; 快得多(尽管一些编译器会这样做作为优化)。此外,任何带符号整数的位操作都可能会给您带来意想不到的结果。然后RGX&gt;&gt;=1; 如果对 RGX 进行签名,则可能会为某些编译器生成具有最高有效位的非零位(当然对于 minGW 也是如此)。但是您甚至不需要手动执行这些操作。您只需要std::bitset 【参考方案1】:

您可以使用std::bitset 而不是手动提取位和数组:

#include <iostream>
#include <ctime> 
#include <cstdlib>   
#include <bitset>

int main() 
    srand (time(NULL));
    int RGX = rand() % 100000000 + 9999999;

    std::cout << "Random Generated One Time HEX #: \n";
    std::cout << std::hex << RGX << "\n";
    std::bitset<32> box(RGX);
    for (int i=0;i<32;++i)
        std::cout << box[i];
    
 

Possible output:

Random Generated One Time HEX #: 
478ada7
11100101101101010001111000100000

“while(RGX!=1 || 0)”后面的括号内没有,它使用 % 并除以 2 直到得到 1 或 0。

没有。那不是那个条件所说的。条件是“循环 while (RGX 不等于 1) 或 0”。由于0 在转换为bool 时始终为false,因此您的条件等同于while(RGX != 1)

【讨论】:

bitset 支持operator&lt;&lt; @Swift-FridayPie 或to_string,循环只是为了演示如何获取单个位,因为我认为这就是 OP 想要的,因为它最接近使用数组(实际上是 OP要求)【参考方案2】:

您可以使用(不知道为什么)std::bitset 来存储未打包的位集合。并且更好地将&lt;random&gt; 用于 RNG 设施。

#include <iostream>
#include <cstdlib>
#include <bitset>
#include <random>
using std::cout;

int main()

    std::random_device rd;
    std::uniform_int_distribution<int> dist(0, 9999999);

    unsigned RGX = dist(rd);

    cout << "Random Generated One Time HEX #:" << std::endl;

    std::bitset<32> bits RGX; // E.g. bits[5] would give you 5th bit
   
    cout << std::hex << RGX << " contains "<< bits << std::endl;  

    return 0;

【讨论】:

以上是关于如何将二进制数存储在数组中?的主要内容,如果未能解决你的问题,请参考以下文章

整数到二进制存储在数组中

java中如何将字符串转换为二进制数

仅显示存储在数组中的两个十进制数

将数字数组转换为二进制数

用matlab啥方法将二进制数转为数组

c语言中如何提取二进制数中的某一位?