C++ 中的位集初始化
Bitset Initializing in C++
class Address {
private :
unsigned char arr[4] = {0};
bitset<8> bits[4];
public :
Address(){
char ip[50];
char temp[4];
cout <<"Enter your IP ADDRESS";
cin >>ip;
int i;
int k=0;
for(i=0;ip[i]!='[=10=]';i++){
if(ip[i]!='.') arr[k]=arr[k]*10 + (ip[i]-48);
else k++;
//Easy PARSE
}
}
};
我需要为 IPV4 实施 Address
class。当我调用 Address
class 的构造函数时,我正在接受-> 将输入解析为 4 个 8 位数组,这基本上是 IPV4 的 4 个八位字节。
255.255.255.255 例如。
现在我需要将它转换为 4 的二进制数组。我不想为此创建外部二进制转换器。我愿意使用 bitset
来实现它。现在的问题是,我还没有找到一个 bitset
函数来初始化位(从十进制转换为 bitset
),除了它的构造函数,它在我的 Address
class 被调用。我可以通过将 4 个单独的成员指针键入 bitset<8>
并在 Address()
中分配每个成员指针来实现,但这是非常不优雅的方法。有任何想法吗? :/
您可以在构造后使用赋值运算符更改bitset
。
这可能是您要查找的部分:
for(int i=0; i <4; i++) {
bits[i] = bitset<8>(arr[i]);
}
这样的事情怎么样:
#include <iostream>
#include <bitset>
int main()
{
std::bitset<8> bits[4];
std::cout << "Enter IP: ";
for (auto &bit : bits)
{
unsigned long n;
std::cin >> n;
bit = n;
std::cin.ignore();
}
// test
std::cout << std::endl;
for (auto const &bit : bits)
std::cout << bit.to_ulong() << " ";
std::cout << std::endl;
for (auto const &bit : bits)
std::cout << bit.to_string();
std::cout << std::endl;
}
192 168 0 1
11000000101010000000000000000001
class Address {
private :
unsigned char arr[4] = {0};
bitset<8> bits[4];
public :
Address(){
char ip[50];
char temp[4];
cout <<"Enter your IP ADDRESS";
cin >>ip;
int i;
int k=0;
for(i=0;ip[i]!='[=10=]';i++){
if(ip[i]!='.') arr[k]=arr[k]*10 + (ip[i]-48);
else k++;
//Easy PARSE
}
}
};
我需要为 IPV4 实施 Address
class。当我调用 Address
class 的构造函数时,我正在接受-> 将输入解析为 4 个 8 位数组,这基本上是 IPV4 的 4 个八位字节。
255.255.255.255 例如。
现在我需要将它转换为 4 的二进制数组。我不想为此创建外部二进制转换器。我愿意使用 bitset
来实现它。现在的问题是,我还没有找到一个 bitset
函数来初始化位(从十进制转换为 bitset
),除了它的构造函数,它在我的 Address
class 被调用。我可以通过将 4 个单独的成员指针键入 bitset<8>
并在 Address()
中分配每个成员指针来实现,但这是非常不优雅的方法。有任何想法吗? :/
您可以在构造后使用赋值运算符更改bitset
。
这可能是您要查找的部分:
for(int i=0; i <4; i++) {
bits[i] = bitset<8>(arr[i]);
}
这样的事情怎么样:
#include <iostream>
#include <bitset>
int main()
{
std::bitset<8> bits[4];
std::cout << "Enter IP: ";
for (auto &bit : bits)
{
unsigned long n;
std::cin >> n;
bit = n;
std::cin.ignore();
}
// test
std::cout << std::endl;
for (auto const &bit : bits)
std::cout << bit.to_ulong() << " ";
std::cout << std::endl;
for (auto const &bit : bits)
std::cout << bit.to_string();
std::cout << std::endl;
}
192 168 0 1
11000000101010000000000000000001