[英]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) = data1
和bitset<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.