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

Posted

技术标签:

【中文标题】整数到二进制存储在数组中【英文标题】:Integer to binary stored in an array 【发布时间】:2017-06-04 21:54:26 【问题描述】:

TL:DR我有一个 10 位整数,并希望将其作为二进制数存储在数组中。


假设我有一个从 0 到 1023 的整数,我希望将该数字转换为 10 位二进制数,然后将其放入一个布尔数组中。这是我目前所做的。

void toBinary(bool *binary)

    string binaryStr = bitset<10>(myValue).to_string(); //to binary
    for (int i = 0; i < 10; i++) binary[i] = binaryStr[i] - '0';

还有比这更好的方法吗?我将对此进行一些视频处理,并在 Pi 上运行它,因此我需要我的程序尽可能轻巧快速。

【问题讨论】:

为什么要转换成字符串?为什么不直接从 bitset 到 bool 缓冲区呢? @PaulMcKenzie:这是我知道的唯一方法。 .to_ulong 对我来说并不是很有效。这就是我想要摆脱的。 也许你错过了bitset&lt;10&gt;可以存储在一个变量中,然后在循环中使用该变量? 【参考方案1】:

我不明白你为什么要将位集转换为字符串。直接访问它的元素即可。

bitset<10> myBitset(myValue);
for (int i = 0; i < 10; i++)
    binary[i] = myBitset[i];

你也可以使用位移,这是最底层的方法:

int mask = 1; // binary 10000000 00000000 ...
for (int i = 0, l = NUM_BITS; i < l; ++i) 
    // binary & operation does 
    // AND logic operation for all corresponging bit
    // so 0010&0011=0010
    binary[i] = myValue & mask;
    // move the bits in mask one to the right
    mask = mask>>1;

如果您使用 bitset,我建议您保留 bitset 而不是使用 bool*,因为在 bitset 中,每个位实际上占用一位,而 bool 至少是八位。

最后,这是我为此编写的一些测试代码,你可以用它来做基准测试:

#include <iostream>
#include <bitset>
#define NUM_BITS 10
int main(int argc, char *argv[])

    const int numBits = NUM_BITS;
    bool binary[numBits];
    const int myValue = 1;

    std::bitset<NUM_BITS> myBitset(myValue);
    //for (int i = 0; i < NUM_BITS; i++)
        //binary[i] = myBitset[i];

    for (int i = 0, l = NUM_BITS; i < l; ++i) 
        std::cout<< (binary[i]?'1':'0')<<" ";
    
    std::cout<<"\n";
    int mask = 1; // binary 10000000 00000000 ...
    for (int i = 0, l = NUM_BITS; i < l; ++i) 
        // binary & operation does 
        // AND logic operation for all corresponging bit
        // so 0010&0011=0010
        binary[i] = myValue & mask;
        // move the bits in mask one to the right
        mask = mask>>1;
    

    for (int i = 0, l = NUM_BITS; i < l; ++i) 
        std::cout<< (binary[i]?'1':'0')<<" ";
    

【讨论】:

我使用的是布尔值,因为我需要将它们用作我的 GPIO 状态。不过感谢您的回答:)

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

使用C [duplicate]将整数数组写入文件

将 FILE 中的二进制字节值存储到 C 数组中

字节数组byte[]和整型,浮点型数据的转换——Java代码

计算机中整数的存储与大小端

将输入中的数据以二进制形式写入和存储,例如数组

如何将 C++ 或 C 中的字符串转换为整数数组?