std::istringstream is(str);
std::bitset<32> bits; // assuming each num is 32 bits long
while(is >> bits) {
unsigned long number = bits.to_ulong();
// now, do whatever you want with that long.
v.push_back(number);
}
如果字符串str中只有一个二进制数,
unsigned long number = std::bitset<32>(str).to_ulong();
在C中转换也是可能的...
long value;
char const *c = str;
for(;;) {
char * endp;
value = strtol(c, &endp, 2);
if(endp == c)
break;
/* huh, no vector in C. You gotta print it out maybe */
printf("%d\n", value);
c = endp;
}
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <iterator>
#include <algorithm>
int main()
{
std::string data = "5 6 7 8 9";
std::stringstream dataStream(data);
std::vector<int> store(
std::istream_iterator<int>(dataStream),
std::istream_iterator<int>{}
);
// This line just copies the store to the std::cout
// To verify it worked.
std::copy(store.begin(),
store.end(),
std::ostream_iterator<int>(std::cout,",")
);
}
6条答案
按热度按时间5lwkijsr1#
正如你在注解中所说,你得到了一个二进制字符串,你想把它转换成整数。使用bitset:
如果字符串
str
中只有一个二进制数,在C中转换也是可能的...
atoi
无法解析二进制数。但是strtol
可以解析它们,如果你告诉它正确的碱基。wvmv3b1j2#
您希望转换工作的具体方式是什么?你只是想要一个包含数组中每个字符的ASCII值的数组吗?(所以“abc”变成[97,98,99,0])?
或者你想以某种方式解析字符串吗?(“1,2,3”变成数组[1,2,3])
在第一种情况下,在C++中,我会这样做:
当然你可以用一个原始数组来代替向量,但是由于字符串的长度可能是可变的,那么数组就是在自找麻烦。
如果这不是你想要的,你可能想编辑你的问题,使其更具体。
jtoj6r0c3#
据我所知,对于输入字符串“1,1,0,0,1,3”将转换为数组{1,1,0,0,1,3}。下面是如何在C++中实现的:
rdrgkggo4#
快速字符串拆分器例程:
您可以使用stringstream而不是atoi(它确实有效,一次处理一个int)
如果你把合并我和贾尔夫的代码结合起来,你会得到一些非常好的东西。
aydmsdu95#
简体中文
表头:
功能原型:
示例用法:
i7uaboj46#
将istream_iterator与字符串流结合使用。
数组我假设你真的是指一个std::vector,因为你在编译时不知道整数的数量。但是代码可以很容易地修改为使用数组而不是向量。