如何在C++中检查位的值
How to check the value of a bit in C++
我想检查这个字符串中从左边开始的第 5 位和第 4 位的值,如下所示:
value: "00001101100000000000000001000110"
value: "00000101100000000000000001000110"
value: "00010101100000000000000001000110"
值是这样生成的字符串:
msg.value = bitset<32>(packet.status()).to_string();
被发送到一个 ROS 节点,我收到它作为一个字符串。
即使它是一个字符串,我仍然可以使用 bitset 来检查位的值吗?
检查它们的最佳解决方案是什么?
只需自行创建位集,进行测试,然后从中创建一个字符串。 (或者从字符串中重新创建一个位集并对其进行测试)
#include <bitset>
#include <string>
#include <iostream>
struct msg_t
{
std::string value;
};
struct packet_t
{
std::string status()
{
return "00001101100000000000000001000110";
}
};
int main()
{
packet_t packet;
auto bits = std::bitset<32>(packet.status());
bool bit4 = bits.test(4);
bool bit5 = bits.test(5);
if (bit4) std::cout << "bit 4 is set\n";
if (bit5) std::cout << "bit 5 is set\n";
msg_t msg;
msg.value = bits.to_string();
return 0;
}
你没有bitset
,你有string
,其中每个“位”由char
表示。
要检查第 4 和第 5 个“位”,只需使用:
msg.value[3] != '0'
和 msg.value[4] != '0'
msg.value[3] & 1
和 msg.value[4] & 1
#2 可能会更快;它利用了 '0'
和 '1'
仅在最低位不同这一事实。
我想检查这个字符串中从左边开始的第 5 位和第 4 位的值,如下所示:
value: "00001101100000000000000001000110"
value: "00000101100000000000000001000110"
value: "00010101100000000000000001000110"
值是这样生成的字符串:
msg.value = bitset<32>(packet.status()).to_string();
被发送到一个 ROS 节点,我收到它作为一个字符串。 即使它是一个字符串,我仍然可以使用 bitset 来检查位的值吗? 检查它们的最佳解决方案是什么?
只需自行创建位集,进行测试,然后从中创建一个字符串。 (或者从字符串中重新创建一个位集并对其进行测试)
#include <bitset>
#include <string>
#include <iostream>
struct msg_t
{
std::string value;
};
struct packet_t
{
std::string status()
{
return "00001101100000000000000001000110";
}
};
int main()
{
packet_t packet;
auto bits = std::bitset<32>(packet.status());
bool bit4 = bits.test(4);
bool bit5 = bits.test(5);
if (bit4) std::cout << "bit 4 is set\n";
if (bit5) std::cout << "bit 5 is set\n";
msg_t msg;
msg.value = bits.to_string();
return 0;
}
你没有bitset
,你有string
,其中每个“位”由char
表示。
要检查第 4 和第 5 个“位”,只需使用:
msg.value[3] != '0'
和msg.value[4] != '0'
msg.value[3] & 1
和msg.value[4] & 1
#2 可能会更快;它利用了 '0'
和 '1'
仅在最低位不同这一事实。