0

我遇到的主要问题是在 C++ 中读取二进制值(python 有一些非常快速/简单的函数可以做到这一点)

我只需要同样的。所以目前我有:

ValWord< uint32_t> data1=//[SOME READ FUNCTION]

当我使用cout << data1;它时,它给了我一个数字,例如2147581953

我希望它是二进制的,最终每个“位”都需要在自己的 bin 中,包括所有 '0',例如:

for (int i = 31; i >= 0; i--) {
      cout << binary[i];
    }  

会给我这个 32 位长的二进制数。当我将它作为一个直接的 int 时,我使用过:

    int data[32];
    bitset<32>(N) = data1;

    for(int i=31; i >=0; i--) {
      data[i]=(bitset<32>(N[i]).to_ulong());
    }

    for (int i = 31; i >= 0; i--) {
      cout << data[i];
    }  

但这只会给我错误消息。有任何想法吗?

4

3 回答 3

3

也许是这样:

#define CPlusPlus11 0

#if CPlusPlus11
int main()
{
    std::uint32_t value(42);
    std::bitset<32> bits(value);
    std::cout << bits.to_string() << std::endl;
    // Storing integral values in the string:
    for(auto i: bits.to_string(char(0), char(1))) {
        std::cout << (int)i;
    }
    std::cout << std::endl;
    return 0;
}
#else
int main()
{
    std::uint32_t value(42);
    std::bitset<32> bits(value);
    std::cout << bits.to_string() << std::endl;
    char data[32];
    for(unsigned i = 0; i < 32; ++i) {
        data[i] = bits[i];
    }
    for(unsigned i = 32; i; --i) {
        std::cout << int(data[i-1]);
    }
    std::cout << std::endl;
    return 0;
}
#endif

注意:你的表达bitset<32>(N) = data1bitset<32>(N[i])代码味道。

于 2013-10-28T11:59:17.857 回答
1

通常,将数字转换为给定基数的字符串非常普遍:

#include <cassert>
#include <string>

static char const Digits[] = "0123456789abcdefghijklmnopqrstuvwxyz";
static size_t const DigitsSize = sizeof(Digits) - 1;

static size_t const BufferSize = 32;

std::string convert(unsigned number, unsigned base) {
    assert(base >= 2 and base <= DigitsSize);

    char buffer[BufferSize] = {};
    char* p = buffer + BufferSize;

    while (number != 0) {
        *(--p) = Digits[number % base];
        number /= base;
    }

    return std::string(p, (buffer + BufferSize) - p);
}

注意:BufferSize是针对最小基数 2 计算的,基数 1 和基数 0 是没有意义的。

注意:如果数字可以为负数,最简单的方法是预先测试它,然后使用它的反义词;需要特别注意的是,32 位整数的最小值的相反值不能用以 2 为底的 32 位整数表示。

于 2013-10-28T13:05:55.720 回答
0

我有一些简单的函数用于此,使用 stl,这是一个用于二进制的函数:

#include <iostream>
#include <algorithm>

using namespace std;

string binary( unsigned long n )
  {
  string result;

  do result.push_back( '0' + (n & 1) );
  while (n >>= 1);

  reverse( result.begin(), result.end() );
  return result;
  }

int main()
{
    cout << binary(1024) << endl;
   cout << "Hello World" << endl; 

   return 0;
}

希望这对你有用!

如果您需要更高性能的东西,请告诉我,我可以尝试为您整理一些汇编程序代码。

于 2013-10-28T12:16:48.377 回答