簡體   English   中英

快速將uint32_t轉換為二進制

[英]Quickly Converting uint32_t to binary

我遇到的主要問題是在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];
    }  

但這只是給我錯誤消息。 有任何想法嗎?

也許這樣:

#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])是代碼味道。

通常,將數字轉換為給定基數的字符串非常普遍:

#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位整數表示。

我使用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;
}

希望這對您有用!

讓我知道您是否需要性能更高的產品,我可以嘗試為您匯編一些匯編程序代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM