2017-10-13 70 views
-1

我无法将16位std :: string转换为可以保存字符串的确切二进制数字的int值。我一直在用的atoi和bitset的插科打诨,但它们转换成deciamls或起飞前导零是有办法做到这一点在二进制表示中将二进制std :: string转换为int

std::string str = "0011101100010101"; 
int num = 0; 
. 
. 
. 
num = 0011101100010101 // now equals 
+0

只要使用'的std :: bitset' [转换二进制格式的字符串为int,在C] – Slava

+0

可能的复制(https://stackoverflow.com/questions/2343099/转换二进制格式的字符串对我nt-in-c) – NineBerry

+0

@NineBerry在C++中,它可以做得更简单,明确编写一个循环 – Slava

回答

1

使用std :: bitset的

std::string str = "0011101100010101"; 
auto number = static_cast<uint16_t>(std::bitset<16>{ str }.to_ulong()); 

或者使用文字如果你不需要一个字符串

uint16_t b = 0b0011101100010101; 
+1

请注意,在C++中引入了[二进制文字](http://en.cppreference.com/w/cpp/language/integer_literal)14 – Kevin

+0

这是真的。主要的编译器(g ++,clang,msvc ...)都支持它,而且许多嵌入式的编译器都作为扩展。我想如果你被困住了,但也有两种方法 – Beached

相关问题