C++ 将1和0的字符串转换为二进制值
我正在尝试将stdin中传入的1和0的sting转换为各自的二进制值(其中,诸如“11110111”之类的字符串将转换为0xF7)。这看起来很简单,但我不想重新发明轮子,所以我想知道C/C++标准库中是否有任何东西可以执行这样的操作?您可以使用strtolC++ 将1和0的字符串转换为二进制值,c++,c,binary,C++,C,Binary,我正在尝试将stdin中传入的1和0的sting转换为各自的二进制值(其中,诸如“11110111”之类的字符串将转换为0xF7)。这看起来很简单,但我不想重新发明轮子,所以我想知道C/C++标准库中是否有任何东西可以执行这样的操作?您可以使用strtol char string[] = "1101110100110100100000"; char * end; long int value = strtol (string,&end,2); #包括 #包括 内部主(空){ char*
char string[] = "1101110100110100100000";
char * end;
long int value = strtol (string,&end,2);
#包括
#包括
内部主(空){
char*ptr;
长解析=strtol(“11110111”和ptr,2);
printf(“%lX\n”,已解析);
返回退出成功;
}
对于较大的数字,有一个long-long
版本,strtoll
您可以使用std::bitset(如果在编译时知道位的长度)虽然有了一些程序,你可以把它分解成块并组合起来
#include <bitset>
#include <iostream>
int main()
{
std::bitset<5> x(std::string("01011"));
std::cout << x << ":" << x.to_ulong() << std::endl;
}
#包括
#包括
int main()
{
std::位集x(std::字符串(“01011”);
std::cout您可以使用Boost动态位集:
boost::dynamic_bitset<> x(std::string("01011"));
std::cout << x << ":" << x.to_ulong() << std::endl;
boost::dynamic_位集x(std::string(“01011”);
std::cout我已经为此编写了一些函数,并在LGPL下获得了许可。可以找到。\include
#包括
#包括
使用名称空间std;
字符串getBinaryString(int值,无符号int长度,布尔反向){
字符串输出=字符串(长度为“0”);
如果(!反向){
for(无符号整数i=0;i if((value&)(1)这看起来是对的。我唯一关心的是非常大的字符串,现在考虑一下,可能无论如何都需要一些自定义代码。除了strtol,还有walk(两个L)表示“long long”整数。啊,现在我明白你的意思了。只要得到的数字适合长整数或长整数,字符串长度就不会有问题。只有当你的二进制字符串超过641
s和0
s时才有问题。然后,你就超出了long
的范围。这不是家庭作业。我正在尝试嵌入一个转换器r更容易读懂一套调试工具,但我们所有的输入都是字符串格式的。我看了你的源代码,做得很好!我还复制了位运算函数+写在纸上进行逻辑计算:D我将使用它们。
boost::dynamic_bitset<> x(std::string("01011"));
std::cout << x << ":" << x.to_ulong() << std::endl;
#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;
string getBinaryString(int value, unsigned int length, bool reverse) {
string output = string(length, '0');
if (!reverse) {
for (unsigned int i = 0; i < length; i++) {
if ((value & (1 << i)) != 0) {
output[i] = '1';
}
}
}
else {
for (unsigned int i = 0; i < length; i++) {
if ((value & (1 << (length - i - 1))) != 0) {
output[i] = '1';
}
}
}
return output;
}
unsigned long getInteger(const string& input, size_t lsbindex, size_t msbindex) {
unsigned long val = 0;
unsigned int offset = 0;
if (lsbindex > msbindex) {
size_t length = lsbindex - msbindex;
for (size_t i = msbindex; i <= lsbindex; i++, offset++) {
if (input[i] == '1') {
val |= (1 << (length - offset));
}
}
}
else { //lsbindex < msbindex
for (size_t i = lsbindex; i <= msbindex; i++, offset++) {
if (input[i] == '1') {
val |= (1 << offset);
}
}
}
return val;
}
int main() {
int value = 23;
cout << value << ": " << getBinaryString(value, 5, false) << endl;
string str = "01011";
cout << str << ": " << getInteger(str, 1, 3) << endl;
}